SpringBoot 项目的登录鉴权架构
目录一、实现这个功能,只需要写 4 部分代码二、第一步:写登录拦截器(核心)三、第二步:写配置类 → 指定哪些接口不拦截(最关键)✔ 作用:四、第三步:写登录接口(不被拦截)五、第四步:ThreadLocal 工具类(前面用过)六、最终效果(项目真实运行规则)1. 访问2. 访问3. 没有 token /token 无效七、一句话总结(面试可直接背)本文用最清晰、最实战、可直接复制到项目的方式,给你讲清楚:登录接口 / 注册接口 / 验证码接口 → 不拦截其他所有接口 → 必须拦截校验 token这是 SpringBoot 项目最标准、最通用的登录鉴权架构。一、实现这个功能,只需要写 4 部分代码登录拦截器(校验 token)配置类(指定哪些接口不拦截)登录接口(放行)ThreadLocal 上下文(存用户)本文直接给你完整可运行代码。二、第一步:写登录拦截器(核心)@Component public class LoginInterceptor implements HandlerInterceptor { @Autowired private StringRedisTemplate redisTemplate; // 1. 请求进入前执行 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 1. 获取请求头里的 token String token = request.getHeader("Authorization"); // 2. 没有 token → 直接拦截 if (StringUtils.isEmpty(token)) { response.setStatus(401); return false; } // 3. 去 redis 中校验 token 是否有效 String userInfo = redisTemplate.opsForValue().get("login:token:" + token); if (StringUtils.isEmpty(userInfo)) { response.setStatus(401); return false; } // 4. token 有效 → 把用户信息存入 ThreadLocal LoginUser loginUser = new LoginUser(); loginUser.setUserId(Long.parseLong(userInfo)); UserContext.setUser(loginUser); return tr