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");
}