本文最后更新于: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<>(); String token = request.getHeader("token");
try { JWTUtils.getTokenInfo(token); return true; }catch (Exception e){ e.printStackTrace(); } map.put("state",false); map.put("msg","token失效");
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/***") .excludePathPatterns("/user/"); } }
|