SpringBoot——对于在WebMvcConfigurer配置了拦截过滤不生效的问题

1、对于WebMvcConfigurer配置了拦截过滤不生效的问题(我的项目在yml中配置了server:contest-path)

server:
  port: 8081
  max-http-header-size: 100MB
  servlet:
    context-path: /api

2、原来在WebMvcConfigurer实现类中的addInterceptors()方法中所写的内容

@Override
public void addInterceptors(InterceptorRegistry registry) {
     InterceptorRegistration addInterceptor=registry.addInterceptor(apiInterceptor);
     List<String> excludeURLS = new ArrayList<>();
     excludeURLS.add("/api/SendPhoneMessage");
     excludeURLS.add("/api/getValidationCode");
     excludeURLS.add("/api/ProcessRateWebSocket");
     excludeURLS.add("/api/downloadBatchAddTemplate");
     excludeURLS.add("/api/download"); 
     addInterceptor.addPathPatterns("/**").excludePathPatterns(excludeURLS);
}

3、问题:当配置了/api/download拦截过滤后请求/api/download不生效

4、原因:在doDispatch中获取要匹配的循环请求路径时是不会添加前缀/api的,是直接在HandlerMapping中获取的路径

 

5、解决:将请求过滤中的/api去掉,然后请求/api/download可以正常访问

@Override
public void addInterceptors(InterceptorRegistry registry) {
       InterceptorRegistration addInterceptor=registry.addInterceptor(apiInterceptor);
       List<String> excludeURLS = new ArrayList<>();
       excludeURLS.add("/SendPhoneMessage");
       excludeURLS.add("/getValidationCode");
       excludeURLS.add("/ProcessRateWebSocket");
       excludeURLS.add("/downloadBatchAddTemplate");
       excludeURLS.add("/download");
       addInterceptor.addPathPatterns("/**").excludePathPatterns(excludeURLS);
}

### Spring Boot 中 `WebMvcConfigurer` 配置拦截器不放行前端请求解决方案 当遇到 `WebMvcConfigurer` 配置拦截器始终拦截前端请求而不放行的情况时,可以考虑以下几个方面来解决问题。 #### 1. 检查拦截配置 确保在实现 `addInterceptors` 方法时正确指定了需要拦截和不需要拦截的URL模式。如果未排除特定路径,则所有请求都会被拦截[^3]。 ```java @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new MyCustomInterceptor()) .addPathPatterns("/api/**") // 添加需要拦截的路径 .excludePathPatterns("/login", "/register"); // 排除不需要拦截的路径 } ``` #### 2. 实现合理的业务逻辑判断 在自定义拦截器中实现 `preHandle` 方法时,应该加入适当的条件判断以决定是否允许请求继续执行。例如可以通过检查 Session 或 Token 来验证用户身份: ```java @Component public class MyCustomInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HttpSession session = request.getSession(false); if (session != null && session.getAttribute("user") != null){ return true; // 放行请求 }else{ response.sendError(HttpServletResponse.SC_UNAUTHORIZED,"User not logged in"); return false; } } ... } ``` #### 3. 确认应用上下文加载顺序 有时由于Bean初始化顺序问题可能导致某些资源未能及时准备好而影响到拦截器的行为。可通过调整依赖注入的方式或者使用 `@DependsOn` 注解等方式尝试解决此类潜在冲突[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值