spring mvc 中 handlerinterceptor 是轻量级登录校验方式,需实现 prehandle 判断登录状态、排除 /login 等路径、通过 webmvcconfigurer 注册,避免响应体操作和异常未捕获等常见问题。

在 Spring MVC 中,HandlerInterceptor 是最常用、最轻量的登录校验实现方式之一。它不依赖 Session 共享或 Token 解析框架,适合传统前后端一体项目或简单权限控制场景。
一、定义拦截器并判断登录状态
创建一个类实现 HandlerInterceptor 接口,重写 preHandle 方法,在其中检查用户是否已登录(比如从 HttpSession 中获取用户信息):
说明:只要返回 false,请求就会被中断,不会进入 Controller;返回 true 则放行。
- 若 session 中存在
"user"属性,表示已登录,直接返回true - 若不存在,可跳转到登录页(
response.sendRedirect("/login")),然后返回false - 注意:重定向后必须返回
false,否则后续逻辑仍可能执行
二、排除登录相关接口不拦截
登录页、登录接口、验证码、静态资源等路径不能被拦截,否则无法完成登录流程。需在配置拦截器时指定 excludePathPatterns:
- 常见排除路径:
/login、/doLogin、/logout、/css/**、/js/**、/images/** - 也可以用
includePathPatterns("/**")显式声明拦截所有路径(默认行为),再配合 exclude 更清晰
三、注册拦截器到 WebMvcConfigurer
Spring Boot 2.0+ 推荐通过实现 WebMvcConfigurer 并重写 addInterceptors 方法来注册:
说明:不要用 @Component + @Configuration 直接注册 Bean,那样无法控制拦截顺序和路径规则。
- 新建配置类,实现
WebMvcConfigurer - 在
addInterceptors方法中调用registry.addInterceptor(...) - 链式调用
.excludePathPatterns(...)设置免拦截路径
四、补充建议:避免常见坑
实际使用中容易忽略的细节:
- 不要在拦截器里操作响应体(如 write 输出 JSON)后还返回 true——会导致重复提交或响应异常
- 登录校验建议结合 CSRF 保护(尤其表单提交),可在拦截器中校验 token 或交由 Spring Security 处理
- 如果用 Redis 存储登录态,拦截器中应捕获连接异常,避免因缓存故障导致全站 500
- 若项目后续要升级为 JWT,可先在拦截器中预留扩展点(如判断 header 中是否有
Authorization)
不复杂但容易忽略。核心就是三步:写拦截逻辑 → 排除登录路径 → 正确注册。做好这几点,基础登录校验就稳了。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











