Spring Boot2 拦截器对静态资源的放行
Spring Boot2 拦截器对静态资源的放行
在前面的案例中,我们大量的使用了拦截器。SpringBoot2.x的拦截器会对静态资源进行拦截。下面介绍以下如何在拦截路径的同时,对静态资源进行放行。在前后端分离的项目中,无需进行此操作,前后端分离项目中我们只需要返回状态码,由前端的路由实现页面权限控制。
在addResourceHandlers
方法内,映射静态资源
在addInterceptors
方法内指定放行规则
/**
* 指定静态资源的位置 非前后端分离项目需要注册
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
/*静态资源的位置*/
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
registry.addResourceHandler("/templates/**").addResourceLocations("classpath:/templates/");
/*放行swagger*/
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
/**
* 注册拦截器
*
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
//放行路径
List<String> jwtExcludePatterns = new ArrayList();
//druid
jwtExcludePatterns.add("/druid/**");
//swagger
jwtExcludePatterns.add("/webjars/**");
jwtExcludePatterns.add("/swagger/**");
jwtExcludePatterns.add("/v2/**");
jwtExcludePatterns.add("/swagger-ui.html/**");
jwtExcludePatterns.add("/swagger-resources/**");
//系统静态资源的放行 前后端分离项目不用考虑静态资源的放行,只需要验权即可
jwtExcludePatterns.add("/");
jwtExcludePatterns.add("/index.html");
jwtExcludePatterns.add("/css/**");
jwtExcludePatterns.add("/js/**");
//需要放行的接口
jwtExcludePatterns.add("/sys/login");
jwtExcludePatterns.add("/login");
jwtExcludePatterns.add("//test/**");
registry.addInterceptor(new JWTInterceptor())
.addPathPatterns("/**")
//放行的静态资源列表
.excludePathPatterns(jwtExcludePatterns);
//注册短信验证码接口的请求次数拦截器
AccessInterceptor codeAccessInterceptor = getCodeAccessInterceptor();
registry.addInterceptor(codeAccessInterceptor)
.addPathPatterns(codeAccessInterceptor.getInterceptorUrl());
//注册手机号校验拦截器
registry.addInterceptor(getSMSValidateInterceptor())
.addPathPatterns("/user/code");
//用户注册参数校验 已经使用全局校验实现
// registry.addInterceptor(getRegisterValidateInterceptor())
// .addPathPatterns("/user/register");
}