Spring拦截器中/*和/**有什么区别

博客介绍了文件夹拦截规则,指出/*用于拦截所有文件夹,但不包含子文件夹;而/**则可拦截所有文件夹及其里面的子文件夹,这在信息技术的文件管理等方面有重要应用。

/* 是拦截所有的文件夹,不包含子文件夹
/** 是拦截所有的文件夹及里面的子文件夹

在排查 `Spring Security` 中 `/oauth2/**` 路径未进入拦截器的原因时,需从多个角度分析配置框架行为。以下是一些可能的原因及解决方案: ### 1. 拦截器路径匹配规则与 Spring Security 的优先级问题 当使用 `.addPathPatterns("/oauth2/**")` 配置拦截器时,该路径应仅匹配 `/oauth2/` 下的所有请求。然而,如果同时启用了 `Spring Security` 并且其安全配置中对 `/oauth2/**` 路径进行了特殊处理(如跳过认证或授权),可能导致请求在到达拦截器之前已被 `Spring Security` 过滤链处理并返回响应。例如,在 `HttpSecurity` 配置中,若使用了 `.antMatchers("/oauth2/**").permitAll()` 或其他类似规则,则可能跳过自定义拦截器的执行 [^2]。 ### 2. 拦截器注册顺序与 WebMvcConfigurerAdapter 的继承方式 在某些情况下,拦截器的注册顺序会影响其是否能够正确拦截到请求。如果使用的是 `WebMvcConfigurerAdapter` 的子类来添加拦截器,并且有多个配置类也实现了 `WebMvcConfigurer` 接口,可能会导致拦截器未被正确加载或覆盖。此外,`WebMvcConfigurerAdapter` 在 Spring Boot 2.0 后已标记为过时,推荐直接实现 `WebMvcConfigurer` 接口而非继承 `WebMvcConfigurerAdapter`,以确保拦截器能正常工作 [^1]。 ### 3. 请求路径未正确匹配 `/oauth2/**` 检查客户端发出的请求路径是否确实符合 `/oauth2/**` 格式。例如,如果实际访问的是 `/oauth2/token`,而服务器端没有接收到该请求,可能是前端路由或网关层进行了重定向或过滤,导致请求未到达预期的后端服务 [^1]。 ### 4. 拦截器逻辑中的条件判断影响日志输出 即使拦截器已经注册并且路径匹配成功,也可能因为 `preHandle` 或 `postHandle` 方法内部的条件判断(如 `if (request.getRequestURI().startsWith("/oauth2/"))`)未能触发日志记录。这通常发生在测试过程中使用的 URL 不完全符合预期,或者存在大小写、斜杠结尾等差异 [^1]。 ### 5. Spring Security 的 CSRF 配置影响请求处理 如果 `Spring Security` 配置中启用了 CSRF 保护(默认是启用的),但客户端未携带有效的 CSRF token,可能导致请求被拒绝,从而无法进入拦截器。虽然可以通过 `.csrf().disable()` 禁用 CSRF,但这会带来安全隐患。因此,在调试期间可以暂时禁用 CSRF 以排除干扰因素 [^2]。 ### 示例代码:正确的拦截器注册方式 ```java @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new OAuth2RequestLoggingInterceptor()) .addPathPatterns("/oauth2/**"); } } ``` ### 示例代码:Spring Security 配置中 `/oauth2/**` 的权限设置 ```java @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/oauth2/**").permitAll() .anyRequest().authenticated() .and() .formLogin() .loginPage("/login-view") .loginProcessingUrl("/login") .successForwardUrl("/login-success") .and() .csrf().disable(); } ``` ###
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值