Spring Security授权成功却返回404错误的解决求助
针对Firebase Token授权成功但返回404的Spring Security修复建议
核心问题分析
授权成功却返回404,说明Spring Security已放行该请求,但后端无对应路径的Controller处理逻辑,或路径配置存在不一致。结合日志里的POST /users/extract-aud请求,从Security配置层面可做以下检查与修复:
1. 校验Security路径匹配规则
确保SecurityConfig中的路径与Controller的映射完全一致,避免大小写、斜杠、拼写错误:
@Configuration @EnableWebSecurity public class SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(auth -> auth .requestMatchers(HttpMethod.POST, "/users/extract-aud").authenticated() // 明确请求方法与路径,和Controller映射严格匹配 .anyRequest().denyAll() ) .addFilterBefore(jwtTokenFilter(), UsernamePasswordAuthenticationFilter.class); return http.build(); } }
2. 放行默认错误路径
当请求无对应Controller时,Spring会转发到/error,若Security未放行该路径,会触发二次拦截。需在配置中添加:
.requestMatchers("/error").permitAll() // 放行默认错误路径,避免授权后触发/error被拦截
3. 排查JwtTokenFilter是否篡改请求路径
检查JwtTokenFilter的doFilterInternal方法,确保没有代码无意中修改请求URI,导致后续路径与Controller不匹配:
public class JwtTokenFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { // 禁止随意修改request的URI filterChain.doFilter(request, response); } }
4. 开启Security调试日志定位问题
在application.properties中添加日志配置,追踪请求流转细节:
logging.level.org.springframework.security=DEBUG
通过调试日志可确认请求是否到达DispatcherServlet,或在过滤器链后出现路径匹配异常。
内容的提问来源于stack exchange,提问作者wladyband
相关产品推荐
相关产品推荐

