【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 完全处理完请求后被调用,可用于清理资源等。返回处理(已经渲染了页面)

如您在阅读中发现不足,欢迎留言!!!

发布了93 篇原创文章 · 获赞 271 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_40065776/article/details/105569197