天天看點

SpringMVC攔截器簡單使用介紹使用

介紹

攔截器一般用在某個方法被通路之前進行攔截,然後在方法執行之前或之後加入某些操作。

使用

1、建立一個SpringBoot工程,定義一個自定義攔截器類,實作HandlerInterceptor接口,重寫三個方法。

public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle.....");
        //簡單實作對是否登入的判斷
        User user = (User) request.getSession().getAttribute("loginUser");

        if(user != null){
            return true;
        }
        return false;
    }

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

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompetion......");
    }
}
           

方法分析

preHandle()在請求方法之前執行,傳回值為boolean類型,true表示請求繼續執行,false表示請求結束。

postHandle()在請求處理完成,dispatcherServlet傳回視圖後執行。

afterCompletion()在dispatcherServlet渲染視圖後執行。

2、編寫攔截器配置類

@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //攔截所有請求
        String[] addPathPatterns = {"/**"};
        //不需要攔截的請求
        String[] excludePathPatterns = {"/page/logout","/page/login","/page/init","/reader/login"};
        registry.addInterceptor(new MyInterceptor()).addPathPatterns(addPathPatterns).excludePathPatterns(excludePathPatterns);
        super.addInterceptors(registry);
    }
}
           

繼續閱讀