介绍一下拦截器 过滤器 和切片

过滤器(Filter)

1.如果你想把一些第三方的过滤器加入到你项目你可以。

  @Bean
    public FilterRegistrationBean timeFilter() {
        FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        TimeFilter timeFilter = new TimeFilter();
        List<String> a = new ArrayList<String>();
        //下面表示所有请求都通过   当然你可以选择你想要的
        a.add("/*");
        registrationBean.setFilter(timeFilter);
        registrationBean.setUrlPatterns(a);
        return registrationBean;

2:过滤器的一些缺点。
因为过滤器只是获得请求与相应,所以你只能从请求中获得一些参数。你要是想获得哪个控制器哪个方法处理执行的话,你是无法知道的。filter这个接口是j2ee定义的,而controller是springmvc自己定义的一套规范,所以filter是无法得知哪个控制器哪个方法处理执行的。

拦截器(Interceptor)

拦截器这个东西是spring框架本身提供的。特征就是实现了HandlerInterceptor接口。

 @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
       //controller方法在被调用之前  这个方法被调用
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
      //controller方法在被调用之后  这个方法被调用,出异常的话则不被调用
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
     // 不论是否有异常这个都调用
    }

2实现

public class Config extends WebMvcConfigurerAdapter {

    @Autowired
    private timeInterceptor timeInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(timeInterceptor);

    }

3.缺点
你无法拿到传入参数的值。我们可以查看源码DispatcherServlet下的doService方法中的doDispatch方法。里面applyPreHandle(大约963行-971),这个方法是调用我们写的拦截器,而在(967)ha.handle这里才会将请求转换为请求参数。所以拦截器是无法获得请求参数的。
ps:不仅是自己的写的控制器(controller)会被拦截,spring本身的controller也会被拦截
切片(Aspect)

下面我就来讲讲切片这个类了,对没有错 ,切片是一个类。如果你想实现它,那么你需要有两个步骤。
1:切入点(注解)——在那些方法起作用,什么时候起作用
2:增强(方法)——起作用时执行的逻辑
具体预防官网可查

点赞