在 Java 里,“拦截器”通常指 Spring MVC 的 HandlerInterceptor,也可能是 Spring Boot 的拦截器 或 Servlet Filter。下面以最常见、最实用的 Spring Boot 拦截器配置为例说明。
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
// 在Controller之前执行
System.out.println("拦截请求:" + request.getRequestURI());
// 示例:未登录跳转到登录页
if (request.getSession().getAttribute("user") == null) {
response.sendRedirect("/login");
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 {
// 视图渲染后(资源清理)
}
}
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor())
.addPathPatterns("/**") // 拦截所有
.excludePathPatterns( // 排除路径
"/login",
"/register",
"/static/**"
);
}
}
✅ 这样就完成了拦截器配置
请求
↓
preHandle(拦截器1 → 拦截器2)
↓
Controller
↓
postHandle
↓
视图渲染
↓
afterCompletion
✅ 登录校验
✅ 权限控制
✅ 接口耗时统计
✅ 请求日志
✅ 防止重复提交
| 对比项 | 拦截器 | 过滤器 |
|---|---|---|
| 所属 | Spring | Servlet |
| 执行位置 | Controller 前后 | Servlet 前后 |
| 能否获取 Bean | ✅ 可以 | ❌ 不方便 |
| 推荐 | Spring 项目 | 底层通用处理 |
xml 或 @ConfigurationFilterChainInterceptor可以告诉我你用的具体框架版本,我给你更精确的示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。