在 Spring(Spring MVC) 中,“拦截器”通常指的是 HandlerInterceptor,用于拦截 Controller 请求。下面按 Spring Boot 和 传统 Spring MVC 两种方式说明如何整合拦截器。
实现 HandlerInterceptor 接口:
@Component
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
// 在 Controller 之前执行
String token = request.getHeader("token");
if (token == null) {
response.setStatus(401);
return false;
}
return true;
}
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler,
ModelAndView modelAndView) throws Exception {
// Controller 执行后,视图渲染前
}
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response,
Object handler,
Exception ex) throws Exception {
// 视图渲染后
}
}
实现 WebMvcConfigurer:
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired
private LoginInterceptor loginInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginInterceptor)
.addPathPatterns("/**") // 拦截路径
.excludePathPatterns( // 排除路径
"/login",
"/error",
"/static/**"
);
}
}
✅ 这样就完成了 Spring Boot 拦截器整合。
public class MyInterceptor implements HandlerInterceptor {
// 同上
}
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/login"/>
<bean class="com.example.MyInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
| 对比项 | 拦截器(Interceptor) | 过滤器(Filter) |
|---|---|---|
| 归属 | Spring | Servlet |
| 执行时机 | Controller 前后 | Servlet 前后 |
| 能否用 Spring Bean | ✅ 可以 | ❌ 默认不行 |
| 使用场景 | 登录、权限、日志 | 编码、XSS、跨域 |
如果你有 具体业务场景(如登录拦截、权限控制、前后端分离),我可以给你更完整的示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。