SpringBoot项目整合jwt和redis完成登录token校验(含原理解析)
@RestController
public class LoginController {
@Autowired
private StringRedisTemplate redisTemplate;
@PostMapping("/login")
public ResponseEntity<?> login(@RequestBody UserLoginIn userLoginIn){
// 假设验证用户是通过的
boolean isVerify = UserVerify.verify(userLoginIn.getUsername(), userLoginIn.getPassword());
if (!isVerify){
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("登录失败");
}
// 生成Token
String token = JwtUtils.generateToken(userLoginIn.getUsername());
// 存储Token到Redis,假设有效期为1天
redisTemplate.opsForValue().set(token, token, 1, TimeUnit.DAYS);
return ResponseEntity.ok(token);
}
@GetMapping("/validate")
public ResponseEntity<?> validateToken(@RequestHeader("Authorization") String token){
// 从Redis获取Token进行比对
String redisToken = redisTemplate.opsForValue().get(token);
if (redisToken == null || !redisToken.equals(token)){
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("Token失效或未认证");
}
return ResponseEntity.ok("Token有效");
}
}
// 假设的UserLoginIn类
class UserLoginIn {
private String username;
private String password;
// getter和setter略
}
// 假设的UserVerify类
class UserVerify {
static boolean verify(String username, String password){
// 假设验证逻辑,返回验证结果
return "user".equals(username) && "pass".equals(password);
}
}
// 假设的JwtUtils工具类
class JwtUtils {
static String generateToken(String username){
// 假设的JWT生成逻辑,返回生成的Token
return "Bearer ey123...";
}
}
这个代码示例展示了如何在Spring Boot项目中使用JWT和Redis来完成登录流程和Token验证。在login
接口中,用户提交用户名和密码进行登录,成功后生成JWT Token并将其存储到Redis中。在validateToken
接口中,通过从Redis获取Token与请求中的Token进行比对,来验证Token的有效性。这个示例假设了一些工具类和方法的实现,实际应用中需要根据项目具体情况进行调整。
评论已关闭