解决springboot2.0版本配置拦截器会拦截静态资源的问题
springboot1.0+版本配置拦截器后,自定义拦截器使用的是继承WebMvcConfigurerAdapter重写常用方法的方式来实现的.静态文件不需要进行放行,springboot会自动对静态资源进行放行,不需要我们手动配置访问静态资源路径,2.0+版本后,WebMvcConfigurerAdapter类被遗弃了,我们自定义拦截器只有通过实现WebMvcConfigurer接口或者继承WebMvcConfigurationSupport类来实现。
此处以实现WebMvcConfigurer接口的方法来实现自定义拦截器。代码如下:
@Bean
public WebMvcConfigurer webMvcConfigurer(){
WebMvcConfigurer webMvcConfigurer = new WebMvcConfigurer() {
@Override
public void addInterceptors(InterceptorRegistry registry) {
//springboot 2.0版本以前已经做好了静态资源映射,2.0以后需要自己配置
registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**")
.excludePathPatterns("/", "/index.html", "/user/login", "/springboot/")
.excludePathPatterns("/static/**");
}
/**
* 添加静态资源文件,外部可以直接访问地址
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//如下配置则能可以访问src/main/resources/static下面的文件,
//如访问static文件夹下的XX.css,则输入:localhost:8080/static/xx.css 即可访问
//注意 registry.addResourceHandler("/static/**")配置得是静态资源访问路径,访问时必须将 //该路径添加进去
registry.addResourceHandler("/static/**")
.addResourceLocations("classpath:/static/");
WebMvcConfigurer.super.addResourceHandlers(registry);
}
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("login");
registry.addViewController("/index.html").setViewName("login");
registry.addViewController("/login").setViewName("login");
registry.addViewController("/main.html").setViewName("dashboard");
}
};
return webMvcConfigurer;
}