SecurityUtil.java 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package com.backendsys.config.Security.utils;
  2. import cn.hutool.core.convert.Convert;
  3. import cn.hutool.json.JSONObject;
  4. import cn.hutool.json.JSONUtil;
  5. import com.backendsys.config.Security.entity.SecurityUserInfo;
  6. import io.jsonwebtoken.Claims;
  7. import io.jsonwebtoken.Jwts;
  8. import org.springframework.context.ApplicationContext;
  9. import org.springframework.context.support.ClassPathXmlApplicationContext;
  10. import org.springframework.data.redis.core.StringRedisTemplate;
  11. import org.springframework.security.core.Authentication;
  12. import org.springframework.security.core.context.SecurityContextHolder;
  13. import javax.crypto.SecretKey;
  14. import javax.crypto.spec.SecretKeySpec;
  15. import java.nio.charset.StandardCharsets;
  16. import java.util.Base64;
  17. import java.util.Map;
  18. public class SecurityUtil {
  19. private static final String SECRET_KEY = "452948404D635166546A576E5A7134743777217A25432A462D4A614E64526755";
  20. private static SecretKey getSignInKey() {
  21. byte[] bytes = Base64.getDecoder().decode(SECRET_KEY.getBytes(StandardCharsets.UTF_8));
  22. return new SecretKeySpec(bytes, "HmacSHA256");
  23. }
  24. /**
  25. * 获得当前登录用户ID
  26. */
  27. public static Long getUserId() {
  28. SecurityUserInfo userInfo = getUserInfo();
  29. return userInfo.getUser_id();
  30. }
  31. /**
  32. * 获得当前登录 Token
  33. */
  34. public static String getToken() {
  35. Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
  36. return Convert.toStr(authentication.getDetails());
  37. }
  38. /**
  39. * 获得当前登录用户基础信息
  40. * 此处的用户信息是根据 Token 解析出来的,因此无法实时更新,仅能用于获取一些基本信息 (以下是完整信息,实际信息见 SecurityUserInfo)
  41. * {"id":1,"user_id":1,"username":"admin","phone":"13670511519","phone_area_code":"86","nickname":"超人","email":"admin@qq.com","gender":1,"avatar":"/uploads/20240430/20240430143807.png","last_login_ip":"0:0:0:0:0:0:0:1","last_login_uuid":"5b34e58d-c884-4b43-9ce1-1c85b1136dcb","last_login_time":"2024-10-25 17:26:55","is_super":1,"point_balance":9870,"status":1,"audit_status":2,"audit_note":"同意通过备注","create_time":1689734700000,"update_time":1729848415000,"del_flag":-1,"roles":[{"id":1,"role_name":"管理员"}],"token_expiration":1729934998492}
  42. */
  43. public static SecurityUserInfo getUserInfo(){
  44. Claims tokenInfo = Jwts.parser().verifyWith(getSignInKey()).build().parseSignedClaims(getToken()).getPayload();
  45. JSONObject userInfo = JSONUtil.parseObj(tokenInfo.get("userInfo"));
  46. String target = Convert.toStr(tokenInfo.get("target"));
  47. SecurityUserInfo securityUserInfo = JSONUtil.toBean(userInfo, SecurityUserInfo.class);
  48. securityUserInfo.setTarget(target);
  49. return securityUserInfo;
  50. }
  51. public static Object getPrincipal() {
  52. Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
  53. Object principal = authentication.getPrincipal();
  54. return principal;
  55. }
  56. }