我是Java新手。我正在使用Spring Boot + OAuth2身份验证+ Swagger创建REST api。
我想要做的显然是让swagger页面允许匿名访问,而/token/oauth端点需要基本的身份验证。
对于我的控制器,我被设置为使用@PreAuthorize,通常使用#oauth2.hasScope('xxx')。我希望潜在的get方法允许匿名get与锁定方法在同一个控制器中。
所以..。我所做的是在ResourceServerConfig中使用下面的代码行:
http.authorizeRequests().antMatchers("/*").permitAll();所以基本上,所有东西都是允许的,然后@PreAuthorize会覆盖我想要保护的任何东西。
我宁愿用PreAuthorize定义哪些方法被锁定在控制器中,而不是维护一个巨大的匿名路径的ant matcher列表。在我看来更干净了。
这一切都像预期的那样工作。没有@PreAuthorize的任何方法都是开放的,而具有@PreAuthorize的方法需要身份验证。
("/*").permitAll()有什么危险吗?由于我是Java的新手,我不确定这是否会打开任何漏洞?似乎有一些“隐藏”的端点,因为我必须在swagger config: RequestHandlerSelectors.basePackage("org.xxx.yyy")中添加一个筛选器,以便只显示我的实际API。
只是想知道有没有什么后果。
谢谢。
发布于 2019-10-27 13:05:40
@SledgeHammer,不是让它保持打开"/",而是在控制器中处理它,将它重定向到某个地方,而不是保持"/“到permitAll,所以将它应用于特定的url模式。
发布于 2019-10-27 14:23:48
您不应该使用("/*").permitAll(),因为它的计算结果始终为真。例如,"denyAll“将拒绝对所有匹配消息的访问;" permitAll”将授予对所有匹配消息的访问权限,因此如果您使用permitAll,则实现安全性没有任何用处。
https://stackoverflow.com/questions/58576754
复制相似问题