Tekken

  博客园  ::  :: 新随笔  ::  ::  :: 管理

三种添加方式

1 实现Filter 添加@Component注解,此方式过滤所有url,可以在代码中判断过滤那些

@Component
@Order(1) //优先级,最顶级
public class TimeFilter implements Filter {

	@Override
	public void destroy() {
		System.out.println("time filter destroy");
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		System.out.println("time filter start");
		long start = new Date().getTime();
		
        String url = request.getRequestURL().toString();
        if (url.contains("XXX")) {
            //过滤逻辑
            ......
        } else {
            //不过滤
            filterChain.doFilter(servletRequest, servletResponse);
        }
		chain.doFilter(request, response);
		System.out.println("time filter 耗时:"+ (new Date().getTime() - start));
		System.out.println("time filter finish");
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		System.out.println("time filter init");
	}
}

2 @Configuration 配置类中通过 FilterRegistrationBean 注册 ,可以配置过滤url 、配置优先级

@Configuration
public class WebConfig {
	@Bean
	public FilterRegistrationBean timeFilter() {
		FilterRegistrationBean registrationBean = new FilterRegistrationBean();

		TimeFilter timeFilter = new TimeFilter();

		registrationBean.setFilter(timeFilter);

		List<String> urls = new ArrayList<>();
		urls.add("/*"); // 可以配置过滤url

		registrationBean.setUrlPatterns(urls);
		registrationBean.setOrder(1);//优先级,最顶级

		return registrationBean;
	}
}

3 通过 @WebFilter 添加过滤器,可以配置过滤url 、配置优先级

@WebFilter(urlPatterns = "/*") //可以配置过滤url
@Order(1) //优先级,最顶级
public class TimeFilter implements Filter {

	@Override
	public void destroy() {
		System.out.println("time filter destroy");
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		System.out.println("time filter start");
		long start = new Date().getTime();
		chain.doFilter(request, response);
		System.out.println("time filter 耗时:"+ (new Date().getTime() - start));
		System.out.println("time filter finish");
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		System.out.println("time filter init");
	}
}
  • 切片 拿不到原始的 HTTP请求参数,可以拿到被切片控制器的 方法 参数 ,可以拿到参数值
  • 过滤器 可以拿到原始的 http请求,拿不到 被过滤的 控制器 方法 参数
  • 拦截器 拿不到原始的 HTTP请求参数,可以拿到被拦截的控制器的 方法 参数,但是拿不到 参数值
posted on 2019-12-19 16:45  Tekken250  阅读(136)  评论(0)    收藏  举报