文章目录
在拦截器中对token进行验证
- 在拦截器中对token进行验证
在拦截器中,对token验证的代码如下 主要的思路为,放行所有的请求. 获取token时,判断其角色. 如果角色是user,那么在request域中,进行存入 如果角色是admin, 那么在request域中,进行存入
package com.tensquare.user.interceptor;
import io.jsonwebtoken.Claims;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import util.JwtUtil;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 类名称:JwtInterceptor
* 类描述:jwt的全局拦截器
*
* @author: taohongchao
* 创建时间:2019/2/16 13:56
* Version 1.0
*/
@Component
public class JwtInterceptor implements HandlerInterceptor {
@Autowired
private JwtUtil jwtUtil;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("经过了拦截器");
String header = request.getHeader("Authorization");
if (header != null && !"".equals(header)) {
//header信息不为空, 那么就进行解析的操作
if (header.startsWith("Bearer ")) {
//得到token
String token = header.substring(7);
//对令牌进行验证
//解析token的过程可能会抛出异常,因此使用try catch
try {
//解析token
Claims claims = jwtUtil.parseJWT(token);
//获取角色信息
String roles = (String) claims.get("roles");
//判断角色是否为空,或者是不是admin角色
if (roles != null && "admin".equals(roles)) {
//如果角色不为空,并且是admin角色. 那么把token的信息,放入request域中,键为claims_admin, 值为token
request.setAttribute("claims_admin",token);
}
if (roles != null && "user".equals(roles)) {
//如果角色不为空,并且是user角色. 那么把token的信息,放入request域中,键为claims_user, 值为token
request.setAttribute("claims_user",token);
}
} catch (RuntimeException e) {
//解析token的过程抛出异常, 也代表权限不足
//异常可能的原因是token过期等等
throw new RuntimeException("令牌不正确!");
}
}
}
//return true代表放行, return false 代表不放行
//任何情况下都要放行, 最终具体的操作,要看其业务
//拦截器只负责把请求头中包含token信息进行解析
return true;
}
}