1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- package com.backendsys.config.Security.utils;
- import cn.hutool.core.convert.Convert;
- import com.backendsys.config.Security.utils.JwtUtil;
- import io.jsonwebtoken.Claims;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.data.redis.core.StringRedisTemplate;
- import jakarta.servlet.http.HttpServletRequest;
- import org.springframework.security.core.Authentication;
- import org.springframework.stereotype.Service;
- import org.springframework.security.core.context.SecurityContextHolder;
- import org.springframework.security.core.userdetails.UserDetails;
- @Service
- public class TokenUtil {
- @Autowired
- private JwtUtil jwtUtil;
- @Autowired
- private StringRedisTemplate stringRedisTemplate;
- @Value("${REDIS_LOGIN_KEY}")
- private String REDIS_LOGIN_KEY;
- public Long getUserId() {
- Claims tokenInfo = getRedisTokenInfo();
- return Convert.toLong(tokenInfo.get("user_id"));
- }
- /**
- * 获得当前系统登录用户在 Redis 中的信息 (如果想在 token 加字段,要在 JwtUtil.createSystemToken 中增加)
- * @return
- */
- public Claims getRedisTokenInfo() {
- String token = stringRedisTemplate.opsForValue().get(REDIS_LOGIN_KEY + getLoginUUID());
- if (token != null && !token.isEmpty()) {
- Claims tokenInfo = jwtUtil.extractAllClaims(token);
- return tokenInfo;
- }
- return null;
- }
- /**
- * 删除 Redis 中的 Token 信息 (退出登录)
- */
- public void deleteRedisToken() {
- stringRedisTemplate.delete(REDIS_LOGIN_KEY + getLoginUUID());
- }
- /**
- * 获得当前系统的 (改为 last_login_uuid) (登录用户的 UUID)
- * @return
- */
- public String getLoginUUID() {
- // 获取当前请求的 userId
- Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
- Object principal = authentication.getPrincipal();
- String loginUUID = (principal instanceof UserDetails) ? ((UserDetails)principal).getUsername() : principal.toString();
- return loginUUID;
- }
- /**
- * 获取请求头中的 Authorization 的 Token 值
- * @param request
- * @return
- */
- public String getToken(HttpServletRequest request) {
- String authorization = request.getHeader("Authorization");
- String token = org.springframework.util.StringUtils.hasText(authorization) ? authorization.replaceFirst("Bearer ", "") : null;
- return token;
- }
- /**
- * (Controller) (Http Request)
- * Claims tokenInfo = tokenService.getTokenInfo(request);
- */
- public Claims getTokenInfo(HttpServletRequest request) {
- String token = getToken(request);
- if (token != null && !token.isEmpty()) {
- Claims tokenInfo = jwtUtil.extractAllClaims(token);
- return tokenInfo;
- }
- return null;
- }
- }
|