在Spring Boot中使用MySQL进行JWT身份验证的例子可以通过以下步骤实现:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, unique = true)
private String username;
@Column(nullable = false)
private String password;
// 其他属性和方法...
}
@Repository
public interface UserRepository extends CrudRepository<User, Long> {
User findByUsername(String username);
}
@Component
public class JwtUtil {
private static final String SECRET_KEY = "your-secret-key";
private static final long EXPIRATION_TIME = 86400000; // 24小时
public String generateToken(User user) {
Date now = new Date();
Date expiryDate = new Date(now.getTime() + EXPIRATION_TIME);
return Jwts.builder()
.setSubject(user.getUsername())
.setIssuedAt(now)
.setExpiration(expiryDate)
.signWith(SignatureAlgorithm.HS512, SECRET_KEY)
.compact();
}
public String getUsernameFromToken(String token) {
return Jwts.parser()
.setSigningKey(SECRET_KEY)
.parseClaimsJws(token)
.getBody()
.getSubject();
}
// 其他方法...
}
@RestController
@RequestMapping("/auth")
public class AuthenticationController {
@Autowired
private UserRepository userRepository;
@Autowired
private JwtUtil jwtUtil;
@PostMapping("/register")
public ResponseEntity<?> registerUser(@RequestBody User user) {
// 检查用户名是否已存在
if (userRepository.findByUsername(user.getUsername()) != null) {
return ResponseEntity.badRequest().body("Username already exists");
}
// 保存用户信息到数据库
userRepository.save(user);
return ResponseEntity.ok("User registered successfully");
}
@PostMapping("/login")
public ResponseEntity<?> authenticateUser(@RequestBody User user) {
// 根据用户名查找用户
User existingUser = userRepository.findByUsername(user.getUsername());
// 检查用户是否存在和密码是否匹配
if (existingUser == null || !existingUser.getPassword().equals(user.getPassword())) {
return ResponseEntity.badRequest().body("Invalid username or password");
}
// 生成JWT令牌
String token = jwtUtil.generateToken(existingUser);
// 返回令牌给客户端
return ResponseEntity.ok(token);
}
// 其他方法...
}
请注意,以上示例仅用于演示如何在Spring Boot中使用MySQL进行JWT身份验证。在实际应用中,你可能还需要添加更多的安全措施和错误处理机制。此外,还可以使用Spring Security等框架来简化身份验证和授权的实现。
关于Spring Boot、MySQL、JWT等技术的更多详细信息和示例代码,你可以参考腾讯云的相关文档和产品:
没有搜到相关的结果