使⽤springBoot实现token校验
使⽤springBoot实现token校验
1. 添加authorToken的依赖包
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.8.2</version>
</dependency>
2. 根据登录的⽤户名,密码⽣成随机token码。并设置过期时间。
⽣成时,需要设置token过期时间,以及秘钥。秘钥使⽤MD5随机⽣成
public static String token(String username, String password){
String token ="";
try{
//过期时间
Date date =new Date(System.currentTimeMillis()+(EXPIRE_DATE*100000));
//秘钥及加密算法
Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET);
//设置头部信息
Map<String, Object> header =new HashMap<>();
header.put("typ","JWT");
header.put("alg","HS256");
//携带username,password信息,⽣成签名
token =ate()
.withHeader(header)
.withClaim("username", username)
.withClaim("password", password).withExpiresAt(date)
.sign(algorithm);
}catch(Exception e){
e.printStackTrace();
return null;
}
return token;
}
3. 添加token校验⽅法
public static boolean verify(String token){
/**
* @desc 验证token,通过返回true
* @params [token]需要校验的串
**/
try{
Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET);
JWTVerifier verifier =quire(algorithm).build();
DecodedJWT jwt = verifier.verify(token);
return true;
}catch(Exception e){
e.printStackTrace();
return false;
}
}
4. 新建LoginInterceptor ⽅法(可以定义,此处仅以此为例)并实现HandlerInterceptor 接⼝,重写其中的preHandle ⽅法。实现在每次请
求前,拦截是否携带必要参数,例如 token
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
boolean flag =true;
RespEnum respEnum = RespEnum.SUCCESS;
try{
//统⼀拦截(查询当前session是否存在user)(这⾥user会在每次登陆成功后,写⼊session)
String token = Header(Constants.APP_USER_TOKEN);
if(StringUtils.isBlank(token)||!TokenUtil.verify(token)){
respEnum = RespEnum.AUTH_ACCESSTOKEN_EXPIRED;
flag =false;
}else if(null== Session().getAttribute(token)){
respEnum = RespEnum.USER_INVALID_LOGINNAME;
flag =false;
}
}catch(Exception e){
e.printStackTrace();
respEnum = RespEnum.AUTH_ACCESSTOKEN_INEXISTENCE;
flag =false;
}
springboot推荐算法//如果设置为false时,被请求时,执⾏到此处将不会继续操作
//如果设置为true时,请求将会继续执⾏后⾯的操作
if(!flag){
this.processResponse(response, respEnum);
}
return flag;
}
5. ⾃定义公⽤controller,注⼊HttpServletRequest 对象。跟前端定义好token传⼊的 key 。登录成功后,可以把token存⼊
session,redis中。然后前端传⼊⽤户token时,去对应的容器中取
6. ps: 如有侵权,联系即删
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论