JWT令牌(web登录规范)
全称:JSON Web Token
是一种简单的,自包含(啥?),用于通信双方以json数据格式安全的传输信息
1.1组成
1.Header(头),记录令牌类型,签名算法
2.Payload(有效荷载),携带一些自定义信息,默认信息
3.Signature(数字签名),防止Token被篡改,确保安全性,将header,payload,加入指定密钥,通过指定签名算法计算而来
1.2 他只是一个工具,只需要关注如何使用(以下是重点)
1.生成
- 引入工具的pom依赖坐标
- 调用
2.验证
- 注意事项
– jwt校验时使用的签名密钥,必须和生成jwt令牌是的是一套
– 如果解析出错,则说明令牌被篡改 或 失效了
实践
3.调用
HashMap<String, Object> claims = new HashMap<>();
claims.put("id",byUserName.getId());
claims.put("username",byUserName.getUsername());
String token = JwtUtil.genToken(claims);
return Result.success(token);
1.3登录验证拦截器
针对众多页面,我们需要一个拦截器对登录验证进行统一校验
1.编写拦截器,实现HandlerInterceptor
@Component
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//令牌验证
String token = request.getHeader("Authorization");
//验证token
try{
Map<String, Object> claims = JwtUtil.parseToken(token);
//放行
return true;
}catch (Exception e){
//设置http响应状态码401
response.setStatus(401);
//不放行
return false;
}
}
}
2.编写一个配置类实现 WebMvcConfigurer 对拦截器进行注册
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired
private LoginInterceptor loginInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
//登录接口和注册接口不拦截
registry.addInterceptor(loginInterceptor).excludePathPatterns("user/login","user/register");
}
}