【黑马点评-1登录验证】三、登录拦截器2 LoginInterceptor 登录拦截
逻辑 下图第二个拦截器

preHandle
- 查询当前线程的ThreadLocal中的userDTO信息,有则放行
- 否则返回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();
}
}

浙公网安备 33010602011771号