【SpringBoot】五、SpringBoot中未登錄攔截

我們需要在項目中對未登錄的用戶進行攔截,使其登錄後才能訪問

1、創建 LoginInterceptor.java,實現 HandlerInterceptor 接口

@Component
public class LoginInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 獲取當前session
        HttpSession session = request.getSession();
        // 根據session獲取登錄用戶
        UserInfo ui = (UserInfo) session.getAttribute(Const.SYSTEM_USER_SESSION);
        // 沒登錄,重定向到登錄頁面
        if (null == ui) {
            response.sendRedirect(request.getContextPath() + "/login");
            return false;
        }
        // 已經登錄
        return true;
    }
}

我們通過實現 HandlerInterceptor 接口,重寫 preHandle 方法,該方法在業務處理器處理請求之前被調用

我們通過從 HttpSession 中獲取用戶信息,用戶信息爲空,則表示“未登錄”,跳轉至“登錄界面”

若用戶信息不爲空,表示“已經登錄”,返回 true 即可

2、攔截器 HandlerInterceptor 方法介紹

以下內容參考博客:https://blog.csdn.net/zhibo_lv/article/details/81699360

boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;

void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception;

void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception;

preHandle:在業務處理器處理請求之前被調用。預處理,可以進行編碼、安全控制、權限校驗等處理;
postHandle:在業務處理器處理請求執行完成後,生成視圖之前執行。後處理(調用了 Service 並返回 ModelAndView ,但未進行頁面渲染),有機會修改 ModelAndView ;
afterCompletion:在 DispatcherServlet 完全處理完請求後被調用,可用於清理資源等。返回處理(已經渲染了頁面)

如您在閱讀中發現不足,歡迎留言!!!

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