Springboot 使用Filter, 拦截器 执行了两次 问题剖析

问题场景:

访问接口,发现拦截器执行了2次。

 

一个普通接口:

 

问题排查分析:

通过debug可以发现,之所以拦截器执行了2次,
第一次是正常的对接口 /myTest进行拦截;

第二次而是, 对/favicon.ico这个 进行的拦截, 这个是访问的运行项目的网站图标。

 

 问题解决方案:

那么可以直接采取的方案是:

也就是进行过滤,不拦截这个访问图标的接口,

        if (!request.getRequestURI().contains("favicon.ico")) {
        
            //拦截代码......

        } 

 

在Spring Boot项目中,启动时的前置拦截器(也称为过滤器或全局前置处理器)通常用于执行一些初始化操作,比如日志记录、权限验证等,这些操作应在每次请求开始之前完成。为了设置这样的前置拦截器,你需要在Spring配置文件`application.properties`或`application.yml`中配置Servlet filters,或者直接在Spring的组件扫描路径下创建一个实现了`Filter`接口的类,并覆盖`doFilter()`方法。 下面是一个简单的例子: ```java @Configuration public class GlobalFilterConfig { @Bean public FilterRegistrationBean globalFilter() { FilterRegistrationBean registrationBean = new FilterRegistrationBean(); // 设置过滤器的名称,方便管理 registrationBean.setName("globalPreInterceptor"); // 定义过滤器 GenericFilterRequest filter = new GenericFilterRequest(new ServletRequestWrapper(new MockHttpServletRequest())); MyGlobalFilter myFilter = new MyGlobalFilter(); // 自定义的全局前置拦截器类 registrationBean.setFilter(myFilter); // 配置过滤器的顺序,数值越小优先级越高 registrationBean.setOrder(Ordered.HIGHEST_PRECEDENCE); return registrationBean; } private static class MyGlobalFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 执行你的初始化操作... // 然后调用下一个过滤器或继续请求处理 chain.doFilter(request, response); } } } ``` 在这个例子中,`MyGlobalFilter` 类就是你的全局前置拦截器,你可以在这里添加自定义的操作。当Spring Boot应用启动时,这个拦截器会被Spring自动加载并执行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小目标青年

对你有帮助的话,谢谢你的打赏。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值