Spring Boot 1.5,都是靠重写 WebMvcConfigurerAdapter 的方法来添加自定义拦截器
SpringBoot 2.0 后,推荐实现 WebMvcConfigurer 或者继承 WebMvcConfigurationSupport 实现
本次我们选择实现 WebMvcConfigurer 接口实现拦截器功能
创建 MyWebConfigurer.java,并实现 WebMvcConfigurer 接口
@Configuration
public class MyWebConfigurer implements WebMvcConfigurer {
...
}
开放静态资源
在 SpringBoot 中,我们将静态资源放在 resources/static/ 目录下,如图:
/**
* 这个方法是用来配置静态资源的,比如html,js,css,等等
*
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
WebMvcConfigurer.super.addResourceHandlers(registry);
}
我们设置 static/ 目录下的资源访问不会被拦截
请求路径拦截
/**
* 这个方法用来注册拦截器,我们自己写好的拦截器需要通过这里添加注册才能生效
*
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 表示不会拦截的请求
registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**").excludePathPatterns(
"/login",
"/register",
"/static/**");
WebMvcConfigurer.super.addInterceptors(registry);
}
我们开放了 /login,/register,/static/**,这些路径不会被拦截
默认访问路径
/**
* 设置默认页面
*
* @param registry
*/
@Override
public void addViewControllers(ViewControllerRegistry registry) {
// registry.addViewController("/").setViewName("forward:/login.html");
registry.addViewController("").setViewName("index");
// 设置优先级 当请求地址有重复的时候 执行优先级最高的
registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
WebMvcConfigurer.super.addViewControllers(registry);
}
设置项目默认访问地址,例如我们只访问:127.0.0.1:8080,就会请求到 index.html
跨域处理
/**
* 跨域处理
*
* @param registry
*/
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")
.allowCredentials(true)
.allowedHeaders("*")
.maxAge(3600);
}
更多关于跨域处理的知识,请看我的另一篇博客:SpringBoot中使用Cors开启跨域
关于 SpringBoot 中拦截器功能的实现就介绍到这儿,基本能满足我们日常开发需要
如您在阅读中发现不足,欢迎留言!!!