首页 > 解决方案 > Java + Spring Boot + REST 安全问题

问题描述

我是 Java 新手。我正在使用 Spring Boot + OAuth2 身份验证 + Swagger 创建一个 REST api。

我想做的显然是让 swagger 页面允许匿名访问,而 /token/oauth 端点需要基本身份验证。

对于我的控制器,我设置为使用@PreAuthorize,通常使用#oauth2.hasScope('xxx')。我想可能拥有允许匿名 GET 与锁定方法在同一个控制器中的方法。

所以......我所做的是在 ResourceServerConfig 中具有以下行:

http.authorizeRequests().antMatchers("/*").permitAll();

所以基本上,一切都是允许的,然后 @PreAuthorize 会覆盖我想要保护的任何东西。

我宁愿使用 PreAuthorize 定义哪些方法被锁定在控制器中,然后维护一个巨大的匿名路径匹配器列表。对我来说似乎更干净。

这一切都按预期工作。任何没有 @PreAuthorize 的方法都是开放的,并且有 @PreAuthorize 的方法需要身份验证。

("/*").permitAll() 有什么危险吗?由于我是 Java 新手,我不确定这是否会造成任何漏洞?似乎有一些“隐藏”端点,因为我不得不向 swagger 配置添加一个过滤器:RequestHandlerSelectors.basePackage("org.xxx.yyy") 只显示我的实际 API。

只是想了解任何后果。

谢谢。

标签: javaspring-bootspring-securityswagger

解决方案


@SledgeHammer,而不是将其保持打开“/”,而是在控制器中处理它以将其重定向到某个地方,而不是将“/”保持为 permitAll,因此将其应用于特定的 url 模式。


推荐阅读