SpringBoot中使用Filter

1.在传统web项目中添加filter

<filter>
   <filter-name>TestFilter</filter-name> <!--定义filter名称 和filter类 -->
    <filter-class>com.jiafeng.filter.TestFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>TestFilter</filter-name> 
  <url-pattern>/*</url-pattern>  <!--设置filter拦截路径 -->
  <init-param>
    <param-name>paramName</param-name>  <!-- 添加初始参数 -->
    <param-value>paramValue</param-value>
  </init-param>
</filter-mapping>

2.在springboot中添加filter有两种方式

2.1代码注册方式

先定义Filter类:Myfilter,而后经过FilterRegistrationBean将filter注册到调用链中。web

@Configuration   //至关于spring中的<beans>标签
public class WebConfiguration {

	@Bean   //至关于spring中<bean>标签
	public FilterRegistrationBean<MyFilter> testFilterRegistration() {
		FilterRegistrationBean<MyFilter> registration = new FilterRegistrationBean<>();
		registration.setFilter(new MyFilter());
		registration.addUrlPatterns("/*");//配置过滤路径
		registration.addInitParameter("paramName", "paramValue");//添加初始值
		registration.setName("myFilter");//设置filter名称
		registration.setOrder(1);//请求中过滤器执行的前后顺序,值越小越先执行
		return registration;
	}

	public class MyFilter implements Filter {

		@Override
		public void destroy() {
			System.out.println("销毁MyFilter");
		}

		@Override
		public void doFilter(ServletRequest sRequest, ServletResponse sResponse, FilterChain chain)
				throws IOException, ServletException {
			HttpServletRequest request = (HttpServletRequest) sRequest;
			System.out.println("this is MyFilter url :" + request.getRequestURI());
			chain.doFilter(sRequest, sResponse);
		}

		@Override
		public void init(FilterConfig arg0) throws ServletException {
			System.out.println("初始化MyFilter");
		}

	}
}

2.2注解注册方式

定义过滤器类:HelloFilter,在过滤器类上添加@WebFilter注解配置过滤器名称、过滤路径等属性,经过@Order配置过滤器执行顺序。spring

注意使用@WebServlet、@WebFilter、@WebListener等servlet注解时须要在springboot的启动类上添加@ServletComponentScan注解,不然不会生效。springboot

@WebFilter(urlPatterns="/*",filterName="helloFilter",initParams= {@WebInitParam(name="paramName",value="paramValue"),@WebInitParam(name="paramName2",value="paramValue2")})
@Order(2)
public class HelloFilter implements Filter {

	@Override
	public void destroy() {

	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
			throws IOException, ServletException {
		System.out.println("执行过滤器Hello Filter !");
		filterChain.doFilter(request, response);
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		System.out.println("初始化HelloFilter!");
	}

}

启动类app

@SpringBootApplication
@ServletComponentScan
public class Application {

	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}

}
相关文章
相关标签/搜索