springboot 增加登錄攔截

最近從頭開始用springboot做了一個項目,做到了一個登錄攔截,實現很簡單,記錄一下。

1.註冊攔截器,新建類 MVCConfiguration

@Configuration
@EnableCaching
public class MVCConfiguration implements WebMvcConfigurer {

    /*
    * 配置攔截器
    * */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //添加對用戶是否登錄的攔截器,並添加過濾項、排除項
        //一開始把用戶登錄功能也給攔截了,跳轉不了
        registry.addInterceptor(new UserLoginInterceptor()).addPathPatterns("/**")
                .excludePathPatterns("/static/*")
                .excludePathPatterns("/toLogin")
        .excludePathPatterns("/user/verifyUser");
        WebMvcConfigurer.super.addInterceptors(registry);

    }

    /*
    * 配置靜態資源
    * */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
    }

    //設置默認頁面
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("forward:/toLogin");
        //設置優先級  當請求地址有重複的時候  執行優先級最高的
        registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
        WebMvcConfigurer.super.addViewControllers(registry);
    }


}

2.攔截器,實現 UserLoginInterceptor

@Component
public class UserLoginInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    	
        HttpSession httpSession=request.getSession();
        Object userId=httpSession.getAttribute("userId");
        if(null!=userId ){
            System.out.println("已登錄"+userId);
            return  true;
        }else{
            System.out.println("未登錄");
            response.sendRedirect(request.getContextPath()+"/toLogin");
            return  false;
        }

    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {

    }
}

三個方法:
1.preHandle:在業務處理器處理請求之前被調用。預處理,可以進行編碼、安全控制、權限校驗等處理。
2.postHandle:在業務處理器處理請求執行完成後,生成視圖之前執行。
3.afterCompletion:在DispatcherServlet完全處理完請求後被調用,可用於清理資源等。返回處理(已經渲染了頁面)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章