SpringBoot整合JWT+Spring Security+Redis实现登录拦截登录认证
@RestController
public class LoginController {
@Autowired
private AuthenticationManager authenticationManager;
@Autowired
private JwtTokenUtil jwtTokenUtil;
@Autowired
private RedisTemplate<String, String> redisTemplate;
@PostMapping("/login")
public ResponseEntity<?> login(@RequestParam String username, @RequestParam String password) {
try {
// 用户登录
Authentication authentication = authenticationManager.authenticate(
new UsernamePasswordAuthenticationToken(username, password));
// 生成JWT
final String token = jwtTokenUtil.generateToken(authentication);
// 将token存储到Redis,以便后续登录状态的验证
redisTemplate.opsForValue().set(token, token, 10, TimeUnit.MINUTES);
// 返回包含token的响应
return ResponseEntity.ok(new JwtResponse(token));
} catch (AuthenticationException e) {
// 处理登录失败的情况
return new ResponseEntity<>("登录失败: " + e.getMessage(), HttpStatus.UNAUTHORIZED);
}
}
}
这段代码展示了如何在Spring Boot应用中使用Spring Security和JWT进行登录认证,并将生成的JWT token存储到Redis以用于后续的用户认证。在登录接口/login
中,首先使用authenticationManager
进行用户认证,认证成功后生成JWT,并将该token存储到Redis,然后返回包含token的响应。如果认证失败,则捕获异常并返回错误信息。
评论已关闭