java - 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。
只是想了解任何后果。
谢谢。
解决方案
@SledgeHammer,而不是将其保持打开“/”,而是在控制器中处理它以将其重定向到某个地方,而不是将“/”保持为 permitAll,因此将其应用于特定的 url 模式。
推荐阅读
- reactjs - 有什么方法可以解决这个错误,每次单击 mui 数据表时,在 StrictMode 中不推荐使用 findDOMNode 的错误?
- node.js - Nodejs exceljs输出文件不正确
- centos - centos: 出现错误名为 no module lnamed “_repo”
- pandas - 过滤 Pandas DataFrame 以仅显示包含字符串列表中所有字符串的行
- javascript - 用于输出数据的 PHP 和用于读取数据的 AJAX
- python - 如何将员工信息从一本字典复制到另一本字典?
- redis - 具有复杂模式匹配的 Redis Pub/Sub
- django - Django过滤列表中的确切值
- apache-spark - 由于火花偏斜,胶水作业失败
- matrix - 更快地计算距离矩阵