SpringBoot项目整合jwt和redis完成登录token校验(含原理解析)_springboot redis jwt
@RestController
public class LoginController {
@Autowired
private StringRedisTemplate redisTemplate;
@PostMapping("/login")
public ResponseEntity<?> login(@RequestBody UserLoginIn userLoginIn){
// 假设验证用户是否存在的逻辑
Boolean isExist = checkUser(userLoginIn);
if (isExist) {
// 生成Token
String token = JwtUtils.generateToken(userLoginIn.getUsername());
// 设置token的有效期
redisTemplate.opsForValue().set(token, userLoginIn.getUsername(), 10, TimeUnit.MINUTES);
return ResponseEntity.ok(new Result(true, StatusCode.OK, "登录成功", token));
} else {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(new Result(false, StatusCode.LOGINERROR, "用户名或密码错误"));
}
}
@GetMapping("/validate")
public ResponseEntity<?> validateToken(@RequestHeader("Authorization") String token){
String username = redisTemplate.opsForValue().get(token);
if (username != null && !username.isEmpty()) {
return ResponseEntity.ok(new Result(true, StatusCode.OK, "Token验证通过", username));
} else {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(new Result(false, StatusCode.UNAUTHORIZED, "Token失效或无效"));
}
}
private Boolean checkUser(UserLoginIn userLoginIn) {
// 假设的用户验证逻辑
if ("user".equals(userLoginIn.getUsername()) && "password".equals(userLoginIn.getPassword())) {
return true;
}
return false;
}
}
这个简化的代码示例展示了如何在Spring Boot应用中使用Redis来存储JWT token和用户信息,以及如何进行token验证。在login
方法中,用户登录成功后生成了一个token,并将这个token存储在Redis中,同时设置了过期时间。在validateToken
方法中,从HTTP头中获取token,并在Redis中查找对应的用户信息,来验证token的有效性。这个例子省略了具体的JWT工具类和结果封装类,但提供了一个简明的流程。
评论已关闭