我们需要在项目中对未登录的用户进行拦截,使其登录后才能访问
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 完全处理完请求后被调用,可用于清理资源等。返回处理(已经渲染了页面)
如您在阅读中发现不足,欢迎留言!!!