温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

spring如何整合拦截器

发布时间:2026-09-18 20:00:02 来源:亿速云 阅读:96 作者:小樊 栏目:编程语言

在 Spring(Spring MVC) 中,“拦截器”通常指的是 HandlerInterceptor,用于拦截 Controller 请求。下面按 Spring Boot 和 传统 Spring MVC 两种方式说明如何整合拦截器。


一、Spring Boot 中整合拦截器(推荐)

1️⃣ 自定义拦截器

实现 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 {
        // 视图渲染后
    }
}

2️⃣ 注册拦截器

实现 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 拦截器整合。


二、传统 Spring MVC(XML 配置)

1️⃣ 定义拦截器

public class MyInterceptor implements HandlerInterceptor {
    // 同上
}

2️⃣ spring-mvc.xml 配置

<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/**"/>
        <mvc:exclude-mapping path="/login"/>
        <bean class="com.example.MyInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>

三、拦截器 vs 过滤器

对比项 拦截器(Interceptor) 过滤器(Filter)
归属 Spring Servlet
执行时机 Controller 前后 Servlet 前后
能否用 Spring Bean ✅ 可以 ❌ 默认不行
使用场景 登录、权限、日志 编码、XSS、跨域

四、常见使用场景

  • ✅ 登录校验
  • ✅ 接口鉴权(Token)
  • ✅ 接口耗时统计
  • ✅ 参数预处理
  • ✅ 防止重复提交

如果你有 具体业务场景(如登录拦截、权限控制、前后端分离),我可以给你更完整的示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手