TokenUtil.java 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package com.backendsys.config.Security.utils;
  2. import cn.hutool.core.convert.Convert;
  3. import com.backendsys.config.Security.utils.JwtUtil;
  4. import io.jsonwebtoken.Claims;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.beans.factory.annotation.Value;
  7. import org.springframework.data.redis.core.StringRedisTemplate;
  8. import jakarta.servlet.http.HttpServletRequest;
  9. import org.springframework.security.core.Authentication;
  10. import org.springframework.stereotype.Service;
  11. import org.springframework.security.core.context.SecurityContextHolder;
  12. import org.springframework.security.core.userdetails.UserDetails;
  13. @Service
  14. public class TokenUtil {
  15. @Autowired
  16. private JwtUtil jwtUtil;
  17. @Autowired
  18. private StringRedisTemplate stringRedisTemplate;
  19. @Value("${REDIS_LOGIN_KEY}")
  20. private String REDIS_LOGIN_KEY;
  21. public Long getUserId() {
  22. Claims tokenInfo = getRedisTokenInfo();
  23. return Convert.toLong(tokenInfo.get("user_id"));
  24. }
  25. /**
  26. * 获得当前系统登录用户在 Redis 中的信息 (如果想在 token 加字段,要在 JwtUtil.createSystemToken 中增加)
  27. * @return
  28. */
  29. public Claims getRedisTokenInfo() {
  30. String token = stringRedisTemplate.opsForValue().get(REDIS_LOGIN_KEY + getLoginUUID());
  31. if (token != null && !token.isEmpty()) {
  32. Claims tokenInfo = jwtUtil.extractAllClaims(token);
  33. return tokenInfo;
  34. }
  35. return null;
  36. }
  37. /**
  38. * 删除 Redis 中的 Token 信息 (退出登录)
  39. */
  40. public void deleteRedisToken() {
  41. stringRedisTemplate.delete(REDIS_LOGIN_KEY + getLoginUUID());
  42. }
  43. /**
  44. * 获得当前系统的 (改为 last_login_uuid) (登录用户的 UUID)
  45. * @return
  46. */
  47. public String getLoginUUID() {
  48. // 获取当前请求的 userId
  49. Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
  50. Object principal = authentication.getPrincipal();
  51. String loginUUID = (principal instanceof UserDetails) ? ((UserDetails)principal).getUsername() : principal.toString();
  52. return loginUUID;
  53. }
  54. /**
  55. * 获取请求头中的 Authorization 的 Token 值
  56. * @param request
  57. * @return
  58. */
  59. public String getToken(HttpServletRequest request) {
  60. String authorization = request.getHeader("Authorization");
  61. String token = org.springframework.util.StringUtils.hasText(authorization) ? authorization.replaceFirst("Bearer ", "") : null;
  62. return token;
  63. }
  64. /**
  65. * (Controller) (Http Request)
  66. * Claims tokenInfo = tokenService.getTokenInfo(request);
  67. */
  68. public Claims getTokenInfo(HttpServletRequest request) {
  69. String token = getToken(request);
  70. if (token != null && !token.isEmpty()) {
  71. Claims tokenInfo = jwtUtil.extractAllClaims(token);
  72. return tokenInfo;
  73. }
  74. return null;
  75. }
  76. }