【黑马点评-1登录验证】三、登录拦截器2 LoginInterceptor 登录拦截

逻辑 下图第二个拦截器

image

preHandle

  1. 查询当前线程的ThreadLocal中的userDTO信息,有则放行
  2. 否则返回401未授权

afterCompletion

销毁ThreadLocal

public class LoginInterceptor implements HandlerInterceptor {

    /**
     * preHandle 方法:
     * 这是 HandlerInterceptor 接口中的方法,在请求到达控制器(Controller)之前执行。
     * 它的返回值决定了请求是否继续执行:
     * 返回 true:请求将继续传递到下一个拦截器或最终的处理器(Controller)。
     * 返回 false:请求被中断,不再继续传递。
     *
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//        1.判断是否需要拦截
        /*
        用户身份检查:
        UserHolder.getUser():假设这是一个自定义的工具类方法,用于获取当前线程关联的用户信息。
        如果返回 null,表示用户未登录。
        如果用户未登录,设置响应状态码为 401(未授权),并返回 false,中断请求处理流程。
         */
        // UserHolder的所有方法都是static的
        if (UserHolder.getUser() == null) {
            response.setStatus(401);
            return false;
        }
        return true;
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        // 移除threadlocal用户,避免内存泄漏
        UserHolder.removeUser();
    }
}
posted @ 2025-04-12 17:36  kuki'  阅读(88)  评论(0)    收藏  举报