SpringBoot使用攔截器


SpringBoot使用攔截器

攔截器Interceptor

Spring MVC的攔截器(Interceptor)和Filter不同,但是也可以實現對請求進行預處理,后處理。先介紹它的使用,只需要兩步:

1、繼承HandlerInterceptor類實現攔截器

/**
 * PC端登錄攔截
 */
@Component
public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("進入LoginInterceptor攔截器---------------------------------------");
        HttpSession session = request.getSession();
        User userInfo = (User) session.getAttribute("userInfo");
        if (userInfo == null){
            // 重定向 登錄頁面     ?請求url
            response.sendRedirect("/layuiAdminbl/login.html?url="+request.getRequestURL().toString());
            return false;
        }
        //放行
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        // System.out.println("后置方法執行..");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        // System.out.println("完成方法執行..");
    }
}

2、實現WebMvcConfigurer接口注冊自定義攔截器

實現攔截器后還需要將攔截器注冊到spring容器中,可以通過implements WebMvcConfigurer,覆蓋其addInterceptors(InterceptorRegistry registry)方法。記得把Bean注冊到Spring容器中,可以選擇@Component 或者 @Configuration。

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {

    @Resource
    private LoginInterceptor loginInterceptor;
    /**
     * 注冊自定義攔截器
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //可以多個攔截器
//       InterceptorRegistration interceptorDemoRegistration = registry.addInterceptor(new InterceptorDemo());
        //interceptorDemoRegistration.addPathPatterns("/..");
        //interceptorDemoRegistration.addPathPatterns("/..");

        InterceptorRegistration interceptorRegistration = registry.addInterceptor(loginInterceptor);
        //可以設置多個路徑攔截
        interceptorRegistration.addPathPatterns("/count");
//        interceptorRegistration.addPathPatterns("/**"); //攔截全部

    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM