spring配置拦截器

 spring配置拦截器

实现WebMvcConfigurer 接口,重写 addInterceptors(InterceptorRegistry interceptorRegistry)方法,通过调用interceptorRegistry.addInterceptor(new HandlerInterceptorAdapter() ) 添加拦截器对象,通过addPathPatterns("/**")匹配拦截的路径。若不设置addPathPatterns,则当前拦截器匹配所有路径。

@Configuration
public class MvcConfigurer implements WebMvcConfigurer {

    //......

    /**
     * 添加拦截器
     *
     * @param interceptorRegistry
     */
    @Override
    public void addInterceptors(InterceptorRegistry interceptorRegistry) {
        interceptorRegistry.addInterceptor(new HandlerInterceptorAdapter() {
           @Override
            public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
                System.out.println("无路由拦截器");
                return false;
            }

            @Override
            public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
                super.postHandle(request, response, handler, modelAndView);
            }

            @Override
            public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
                super.afterCompletion(request, response, handler, ex);
            }
        });
        interceptorRegistry.addInterceptor(new HandlerInterceptorAdapter() {
            @Override
            public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
                System.out.println("存在路由拦截器");
                return super.preHandle(request, response, handler);
            }
        }).addPathPatterns("/**");
    }
}

编写拦截器对象,继承抽象类HandlerInterceptorAdapter,或实现HandlerInterceptor接口。

重写以下三个方法

1、preHandle :在HandlerAdapter实际调用处理程序之前调用。多个拦截器配置按照先后顺序依次执行。若遇到返回false,停止整个调用链,返回结果。

2、postHandle:在HandlerAdapter实际调用处理程序之后调用,但在DispatcherServlet呈现视图之前调用。可以通过给定的ModelAndView向视图公开其他模型对象。注意:只有所有拦截器的preHandle方法成功完成并返回true时才会调用它!该方法将以相反的顺序在链中的每个拦截器上调用,因此第一个拦截器将是最后一个被调用的拦截器。

3、afterCompletion:处理程序完整执行后,包括已经视图解析以及视图与模型数据整合之后。注意:只有所有拦截器的preHandle方法成功完成并返回true时才会调用它!并且与postHandle方法一样,该方法将以相反的顺序在链中的每个拦截器上调用,因此第一个拦截器将是最后一个被调用的拦截器。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值