JWT-(二)JWT整合SpringBoot

本文最后更新于:February 4, 2022 pm

JSON Web 令牌是一种开放的行业标准 RFC 7519方法,用于在两方之间安全地表示声明。JSON Web Token (JWT) 是一个开放标准 ( RFC 7519 ),它定义了一种紧凑且自包含的方式,用于在各方之间以 JSON 对象的形式安全传输信息。此信息可以验证和信任,因为它是数字签名的。JWT 可以使用密钥(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名。官网

目录

在访问url前进行token验证。如果是给每一个方法都加验证的话,则会出现大量的冗余代码,所以可以用拦截器(网关)解决。

设置拦截器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package com.tothefor.interceptor;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.tothefor.utils.JWTUtils;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;

public class JWTInterceptor implements HandlerInterceptor {

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Map<String,Object> map = new HashMap<>();
//获取请求头中的token
String token = request.getHeader("token");

try {
JWTUtils.getTokenInfo(token); //验证token
return true; //放行请求
}catch (Exception e){
e.printStackTrace();
}
map.put("state",false);
map.put("msg","token失效");

//将map转为json jackson自带
String json = new ObjectMapper().writeValueAsString(map);
response.setContentType("application/json;charset=UTF-8");
response.getWriter().println(json);
return false;
}
}

配置拦截器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.tothefor.config;

import com.tothefor.interceptor.JWTInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new JWTInterceptor())
.addPathPatterns("/user/***") //哪些url需要验证
.excludePathPatterns("/user/"); //哪些不需要验证
}
}