在 Java 里,“拦截器”常见于 Spring MVC 拦截器 和 Servlet Filter,最常见的是 Spring 拦截器(HandlerInterceptor)。下面我分几种情况给你讲,并给出完整示例。
实现 HandlerInterceptor 接口:
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 {
Object user = request.getSession().getAttribute("user");
if (user == null) {
response.sendRedirect("/login");
return false; // 拦截请求
}
return true; // 放行
}
// 控制器执行后,视图渲染前
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler,
org.springframework.web.servlet.ModelAndView modelAndView) {
// 可修改 ModelAndView
}
// 整个请求完成后
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response,
Object handler,
Exception ex) {
// 资源清理
}
}
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"); // 排除登录
}
}
适合做 编码、日志、安全过滤
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter("/*")
public class EncodingFilter implements Filter {
@Override
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
chain.doFilter(request, response); // 放行
}
}
Spring Boot 需加
@ServletComponentScan
| 对比项 | Filter | Interceptor |
|---|---|---|
| 所处位置 | Servlet 容器 | Spring MVC |
| 使用场景 | 编码、安全 | 登录、权限 |
| 获取 Spring Bean | 不方便 | 方便 |
✅ 登录校验
✅ 权限控制
✅ 接口耗时统计
✅ 日志打印
✅ 防重复提交
如果你用的是 Spring Boot / Spring Cloud / Struts / MyBatis 拦截器,可以告诉我,我可以给你对应示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。