天天看點

SpringBoot之HandlerInterceptor攔截器的使用攔截器的作用攔截器的特點springboot中攔截器開發步驟

攔截器的作用

将多個Cotroller中共有的代碼放在攔截器中執行,減少Controller中的代碼備援,最常用的登入攔截、或是權限校驗、或是防重複送出。

攔截器的特點

1)請求到達經過攔截器,響應回來經過攔截器

2)攔截器中斷使用者的請求軌迹

3)攔截器隻能攔截控制器相關請求路徑

springboot中攔截器開發步驟

1.自定義一個攔截器MyInterceptor實作HandlerInterceptor接口,不要忘記加上@Component注解建立元件

@Component
public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {
        //取出登陸标志位
        Object user = request.getSession().getAttribute("user");
        if(user == null){
            //如果沒有登陸 就重定向到登入頁面  /shopcar是配置檔案中設定的context-path
            response.sendRedirect("/shopcar/view/LoginView.jsp");
            return false;
        }else{
            //登入過了就放行
            return true;
        }
    }
    @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {

    }
    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {

    }
}
           

這其中有三個方法:

  • preHandle:在業務處理器處理請求之前被調用。預處理,可以進行編碼、安全控制、權限校驗等處理;
  • postHandle:在業務處理器處理請求執行完成後,生成視圖之前執行。後處理(調用了Service并傳回ModelAndView,但未進行頁面渲染),有機會修改ModelAndView (這個部落客就基本不怎麼用了);
  • afterCompletion:在DispatcherServlet完全處理完請求後被調用,可用于清理資源等。傳回處理(已經渲染了頁面);

2.建立InterceptorConfig繼承WebMvcConfigurerAdapter類,覆寫其中的

addInterceptors方法,同樣不要忘了加@Component注解

@Configuration
public class InterceptorConfig extends WebMvcConfigurerAdapter {

    @Bean
    public HandlerInterceptor getMyInterceptor(){
        return new MyInterceptor();
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        InterceptorRegistration interceptor = registry.addInterceptor(getMyInterceptor());
        // 攔截所有、排除
        interceptor.addPathPatterns("/**")
                .excludePathPatterns("/user/login");
    }
}
           

這樣一個攔截器的強制登入就實作了。

繼續閱讀