You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringSecurity配置异常:permitAll()设置后/api/authorization/company-login端点返回404

看起来你的Spring Security权限配置其实是正常工作的——毕竟你修改antMatchers里的路径后,原端点会返回403,这说明permitAll()的规则已经在生效了。而现在的404异常,本质上不是权限拦截的问题,而是请求通过Security后,后端找不到对应的资源来处理这个请求。

下面是针对这个问题的具体排查步骤:

第一步:确认Controller路径是否完全匹配

首先检查你是否有对应的Controller类和方法,并且路径拼接后完全一致。比如:
如果你的Controller类上有前缀@RequestMapping("/api/authorization"),那么方法上的路径应该是@PostMapping("/company-login"),这样完整路径才是/api/authorization/company-login。

示例代码:

@RestController
@RequestMapping("/api/authorization")
public class AuthController {
    // 注意请求方式要和你实际调用的一致(GET/POST/PUT等)
    @PostMapping("/company-login")
    public ResponseEntity<?> handleCompanyLogin() {
        // 你的登录逻辑
        return ResponseEntity.ok("Login endpoint is working");
    }
}

要特别注意:路径的大小写、末尾是否带斜杠(比如/company-login和/company-login/是两个不同的路径)、注解的参数是否正确。

第二步:检查请求方式是否匹配

如果你的Controller方法用的是@PostMapping,但你用GET请求访问,就会返回404。可以临时修改方法的请求方式为通配来验证:

@RequestMapping(value = "/company-login", method = {RequestMethod.GET, RequestMethod.POST})

然后用Postman或curl测试两种请求方式,看是否能正常返回。

第三步:排除过滤器或拦截器的干扰

虽然你的GoAuthorizationFilter目前没有业务逻辑,但可以先注释掉addFilterBefore那一行,重新启动应用测试:

// .addFilterBefore(goAuthorizationFilter, UsernamePasswordAuthenticationFilter.class)

确认是否是过滤器无意中影响了请求的传递。

第四步:检查组件扫描范围

确保你的Controller类在Spring Boot主应用类的扫描范围内。比如主类在com.example.demo包下,而Controller在com.example.demo.controller包下,Spring会自动扫描。如果Controller在其他包下,需要在主类上添加@ComponentScan指定扫描路径:

@SpringBootApplication
@ComponentScan(basePackages = {"com.example.demo", "com.your.other.package"})
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

第五步:开启日志查看请求映射详情

在application.properties中添加日志配置,让Spring MVC打印所有注册的请求映射:

logging.level.org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping=DEBUG

启动应用后,你会在控制台看到类似这样的日志:

Mapped "{[/api/authorization/company-login],methods=[POST]}" onto public org.springframework.http.ResponseEntity<?> com.example.demo.controller.AuthController.handleCompanyLogin()

如果找不到这个路径的日志,说明你的Controller没有被正确注册,需要回到前面的步骤排查。

总结

你的Spring Security配置本身没有问题——permitAll()已经生效,否则会返回403。404的核心原因是请求到达后端后,没有对应的Controller方法来处理这个路径/请求方式,按照上面的步骤逐一排查就能解决问题。

内容的提问来源于stack exchange,提问作者TheBezwet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 13:47:36