1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- package com.backendsys.config.Security.utils;
- import cn.hutool.core.convert.Convert;
- import cn.hutool.json.JSONObject;
- import cn.hutool.json.JSONUtil;
- import com.backendsys.config.Security.entity.SecurityUserInfo;
- import io.jsonwebtoken.Claims;
- import io.jsonwebtoken.Jwts;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- import org.springframework.data.redis.core.StringRedisTemplate;
- import org.springframework.security.core.Authentication;
- import org.springframework.security.core.context.SecurityContextHolder;
- import javax.crypto.SecretKey;
- import javax.crypto.spec.SecretKeySpec;
- import java.nio.charset.StandardCharsets;
- import java.util.Base64;
- import java.util.Map;
- public class SecurityUtil {
- private static final String SECRET_KEY = "452948404D635166546A576E5A7134743777217A25432A462D4A614E64526755";
- private static SecretKey getSignInKey() {
- byte[] bytes = Base64.getDecoder().decode(SECRET_KEY.getBytes(StandardCharsets.UTF_8));
- return new SecretKeySpec(bytes, "HmacSHA256");
- }
- /**
- * 获得当前登录用户ID
- */
- public static Long getUserId() {
- SecurityUserInfo userInfo = getUserInfo();
- return userInfo.getUser_id();
- }
- /**
- * 获得当前登录 Token
- */
- public static String getToken() {
- Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
- return Convert.toStr(authentication.getDetails());
- }
- /**
- * 获得当前登录用户基础信息
- * 此处的用户信息是根据 Token 解析出来的,因此无法实时更新,仅能用于获取一些基本信息 (以下是完整信息,实际信息见 SecurityUserInfo)
- * {"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}
- */
- public static SecurityUserInfo getUserInfo(){
- Claims tokenInfo = Jwts.parser().verifyWith(getSignInKey()).build().parseSignedClaims(getToken()).getPayload();
- JSONObject userInfo = JSONUtil.parseObj(tokenInfo.get("userInfo"));
- String target = Convert.toStr(tokenInfo.get("target"));
- SecurityUserInfo securityUserInfo = JSONUtil.toBean(userInfo, SecurityUserInfo.class);
- securityUserInfo.setTarget(target);
- return securityUserInfo;
- }
- public static Object getPrincipal() {
- Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
- Object principal = authentication.getPrincipal();
- return principal;
- }
- }
|