我是 Java 新手。我正在使用 Spring Boot + OAuth2 身份验证 + Swagger 创建 REST api。
我想做的显然是让 swagger 页面允许匿名访问,并且/token/oauth 端点需要基本身份验证。
对于我的 Controller ,我设置为使用 @PreAuthorize,通常与 #oauth2.hasScope('xxx') 一起使用。我希望有一些 get 方法,允许在与锁定方法相同的 Controller 中进行匿名 GET。
所以...我所做的是在 ResourceServerConfig 中将这一行设置为:
http.authorizeRequests().antMatchers("/*").permitAll();
所以基本上,一切都是允许的,然后 @PreAuthorize 会覆盖我想要保护的任何内容。
我宁愿使用 PreAuthorize 定义哪些方法被锁定在 Controller 中,然后维护一个巨大的匿名路径匹配器列表。对我来说似乎更干净。
这一切都按预期工作。任何没有 @PreAuthorize 的方法都是开放的,并且有 @PreAuthorize 的方法都需要身份验证。
("/*").permitAll() 有什么危险吗?由于我是 Java 新手,我不确定这是否会造成任何漏洞?似乎有一些“隐藏”端点,因为我必须向 swagger 配置添加一个过滤器:RequestHandlerSelectors.basePackage("org.xxx.yyy") 以仅显示我的实际 API。
只是想了解任何后果。
谢谢。
最佳答案
@SledgeHammer,不要将其保持打开“/”,而是在 Controller 中处理它以将其重定向到某个位置,而不是将“/”保持为permitAll,因此将其应用于特定的url模式。
关于Java + Spring Boot + REST 安全问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58576754/