Springboot获取请求头里面的Token
获取请求头的信息
使用拦截器来获取请求头的信息
创建MyInterceptor类来获取信息
/***
* 拦截器拦截
*/
@Component
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//获取请求头里面的值
boolean flag = true;
String token = request.getHeader("Authorization");
if (StringUtils.isEmpty(token)) {
flag = false;
}
//替换bearer
String newtoken = token.replace("Bearer ", "");
System.out.println(newtoken);
try {
//判断是否合法
if (StringUtils.isEmpty(JwtUtil.verify(newtoken))) {
return true;
}
} catch (Exception e) {
return false;
}
return flag;
}
}
WebMvcConfig类 注册拦截器
/**
* 注册拦截器
* */
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Autowired
MyInterceptor myinterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myinterceptor).addPathPatterns("/flow/task/**");
}
}
Jwt工具类来判断是否合法等
/**
* @Auther 罗涛
* @Date 2023/3/28
* 落尽红樱君不见,轻绘梨花泪沾衣
*/
@Component
public class JwtUtil {
@Resource
private Cache<Object> cache;
/**
* 构建token
*
* @param username 主体
* @param claim 私有声明
* @param userEnums 用户枚举
* @return TOKEN
*/
public String createToken(String username, Object claim, UserEnums userEnums) {
//访问token
String accessToken = createToken(username, claim,1440L);
// String accessToken = createToken(username, claim,1L);
// cache.put(CachePrefix.TOKEN.getPrefix(userEnums) + accessToken, 1,1200L
// , TimeUnit.MINUTES);
return accessToken;
}
/**
* 校验token
*/
public boolean verify(String token){
try {
Jwts.parserBuilder().setSigningKey(KeyUtils.generalKeyByDecoders()).build().parseClaimsJws(token);
return true;
}catch (Exception e){
return false;
}
}
/**
* 生成token
*
* @param username 主体
* @param claim 私有神明内容
* @param expirationTime 过期时间(分钟)
* @return token字符串
*/
private String createToken(String username, Object claim, Long expirationTime) {
//JWT 生成
return Jwts.builder()
//jwt 私有声明
.claim(SecurityEnum.USER_CONTEXT.getValue(), JSONUtil.toJsonStr(claim))
//JWT的主体
.setSubject(username)
//失效时间 当前时间+过期分钟
.setExpiration(new Date(System.currentTimeMillis() + expirationTime * 60 * 1000))
//签名算法和密钥
.signWith(KeyUtils.generalKeyByDecoders())
.compact();
}
/**
* 根据request获取用户信息
*
* @return 授权用户
*/
public static UserInfo getCurrentUser() {
if (RequestContextHolder.getRequestAttributes() != null) {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String accessToken = request.getHeader(SecurityEnum.HEADER_TOKEN.getValue());
return getAuthUser(accessToken);
}
return null;
}
/**
* 根据jwt获取token重的用户信息
*
* @param accessToken token
* @return 授权用户
*/
public static UserInfo getAuthUser(String accessToken) {
try {
//获取token的信息
Claims claims = Jwts.parserBuilder().setSigningKey(KeyUtils.generalKeyByDecoders()).build().parseClaimsJws(accessToken).getBody();
// Claims claims
// = Jwts.parser()
// .setSigningKey(KeyUtils.generalKeyByDecoders())
// .parseClaimsJws(accessToken).getBody();
//获取存储在claims中的用户信息
String json = claims.get(SecurityEnum.USER_CONTEXT.getValue()).toString();
return JSONUtil.toBean(json,UserInfo.class);
} catch (Exception e) {
return null;
}
}
}