SpringBoot添加过滤器、拦截器学习笔记
添加过滤器有两种方式:
-
-
过滤器继承Filter并在类上面添加@WebFilter,启动类上面加上@ServletComponentScan;
-
@ServletComponentScan默认扫描全部注解,属性basePackages可以指定包。
-
@ServletComponentScan(basePackages = "com.huarui.springboot3_1.filter/**") -
/*:这一层的所有,/**:所有层的所有;
-
-
-
配置类:但是同时需要使用第一种方式创建过滤器
第二种方式不需要扫描注解即@ServletComponentScan,因为配置类已经自动注册进spring容器了,而第一种并没有直接注入spring中需要扫描注解才会生效
-
第一种方式过滤顺序是按照类的排序来的,而第二种方式则可以通过setOrder来设置顺序。
package com.huarui.springboot3_1.filter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
@Configuration
public class MyFilterConfig {
// 这是springboot第二种注册过滤器的方式
@Bean
public FilterRegistrationBean setFilter1(){
FilterRegistrationBean filter=new FilterRegistrationBean();
filter.setFilter(new MyFilter());
filter.setName("f1");
filter.addUrlPatterns("/*");
filter.setOrder(3);
return filter;
}
@Bean
public FilterRegistrationBean setFilter2(){
FilterRegistrationBean filter=new FilterRegistrationBean();
filter.setFilter(new MyFilter2());
filter.setName("f2");
filter.addUrlPatterns("/*");
filter.setOrder(2);
return filter;
}
@Bean
public FilterRegistrationBean setFilter3(){
FilterRegistrationBean filter=new FilterRegistrationBean();
filter.setFilter(new MyFilter3());
filter.setName("f3");
filter.addUrlPatterns("/*");
filter.setOrder(1);
return filter;
}
}
接口WebMvcConfigurer
// 静态资源放行
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//第一个方法中的参数是对外暴露的路径,对应着第二个方法中参数的内部路径
registry.addResourceHandler("/myResources/**").addResourceLocations("classpath:/myResources/");
}
-
将/myResources/下的请求从/myResources/内部路径中查找资源;
添加拦截器:addInterceptors()
// 添加拦截器
@Autowired
private MyInterceptor2 my2;
@Bean//把返回的对象注入spring
public MyInterceptor3 getMy3(){
return new MyInterceptor3();
}
@Autowired
private MyInterceptor3 my3;
// 拦截器在这里添加进去
public void addInterceptors(InterceptorRegistry registry) {
// 拦截器拦截所有的请求
// registry.addInterceptor(new MyInterceptor1()); 多例
// registry.addInterceptor(my2); 单例
// 指定拦截 aa和bb 下面的所有请求 addPathPatterns()的参数是String... 可变参数
// registry.addInterceptor(my2).addPathPatterns("/aa/**").addPathPatterns("/bb/**");
// registry.addInterceptor(my2).addPathPatterns("/**","/**");
// 不拦截以.html结尾的文件
registry.addInterceptor(my2).addPathPatterns("/**","/**").excludePathPatterns("/**.html");
}
视图跳转控制器:addViewControllers()
// 没有业务逻辑,只是跳转页面
@Override
public void addViewControllers(ViewControllerRegistry registry) {
// 默认就是转发 请求:index,跳转到index.html页面
registry.addViewController("index").setViewName("index.html");
// 重定向的两种方式
registry.addViewController("index2").setViewName("redirect:index.html");
registry.addRedirectViewController("index3","index.html");
}
浙公网安备 33010602011771号