Spring boot 2.0 之后只需要继承WebMvcConfigurationSupport类,重写add
Intercepto 方法添加注册拦截器即可完成拦截
继承HandlerInterceptorAdapter重写preHandle方法来完成拦截操作。
这里以发布评论为例,在发送利用拦截器(token)进行身份校验
创建拦截类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| package com.zby.qa.config; import com.zby.qa.interceptor.JwtInterceptor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Component; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; @Component @Configuration public class JwtConfiguration extends WebMvcConfigurationSupport { @Autowired JwtInterceptor jwtInterceptor; @Override protected void addInterceptors(InterceptorRegistry registry) { /** * addInterceptor :添加拦截方法 * addPathPatterns :添加拦截请求路径(/** :拦截一切请求) * excludePathPatterns :加入白名单(此请求不拦截) * */ registry.addInterceptor(jwtInterceptor).addPathPatterns("/**") .excludePathPatterns(""); } }
|
重写拦截方法
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.zby.qa.interceptor; import com.zby.util.JwtUtil; import io.jsonwebtoken.Claims; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @Component public class JwtInterceptor extends HandlerInterceptorAdapter { @Autowired JwtUtil jwtUtil; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("此处拦截器已拦截,正在校验当前登录者的身份"); //获取页面头Authrorization String authrorization = request.getHeader("Authrorization"); if(authrorization != null && authrorization.startsWith("Bearer ")){ //截取token段 String token = authrorization.substring(7); //解析token Claims claims = jwtUtil.parseJwt(token); if(claims != null){ if("1".equalsIgnoreCase((String) claims.get("roles"))){ request.setAttribute("access_admin",claims); }else if("0".equalsIgnoreCase((String) claims.get("roles"))){ request.setAttribute("access_error",claims); }else { throw new RuntimeException("操作拒绝!"); } } return true; } return true; } }
|
Service(部分测试代码)
Controller (部分测试代码)
测试(没权限):
测试(有权限):