我們需要在項目中對未登錄的用戶進行攔截,使其登錄後才能訪問
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 完全處理完請求後被調用,可用於清理資源等。返回處理(已經渲染了頁面)
如您在閱讀中發現不足,歡迎留言!!!