【发布时间】:2018-01-04 10:29:36
【问题描述】:
我正在为 Spring MVC Web 应用程序添加安全性,该应用程序有大约 100 个您可以访问的不同 URL(例如:GET /users、GET /users/{userId}、...)。
我正在使用 Spring Security 的方法安全表达式添加安全性:
@GetMapping(value = "/load-configurations", produces = "application/json")
@PreAuthorize("@accessChecker.canViewBusinessData(authentication)")
public ResponseEntity<List<SavedCalculationConfiguration>> loadConfigurations() {
和
@GetMapping(value = "/api/v1/export-all")
@PreAuthorize("@accessChecker.isIT(authentication)")
public ResponseEntity<?> exportAllToXml(Principal principal,
@PreAuthorize 部分是我现在到处添加的部分。
由于这些方法分散在不同的控制器中,我很难检查我是否为每个方法添加了正确的安全注释并且没有遗漏任何一个。
我想知道的是,是否有某种方法可以让 spring 列出每个已知 URL 以及如何保护该 URL。我想用它来检查我是否做对了一切,并不时检查是否有人忘记为新方法添加安全性。
当我启动我的应用程序时,spring 会记录每个已知的 URL,因此我知道它必须将这些数据隐藏在内部类中的某个地方。此外,当我在 spring 安全过滤器中放置断点时,我可以看到一个变量,其中包含我用来配置安全性的表达式,但仅限于我要导航到的 URL,而不是所有的。
我确定某个内部类或打开特定日志记录级别将包含我需要的所有数据,但我找不到它:) 有什么帮助吗?
【问题讨论】:
-
Spring Security 的方法安全性不适用于控制器方法,你应该只在业务类上使用它。所以 AFAIK 没有 Spring MVC 控制器方法和 Spring Security 的方法安全性的耦合。
-
作为一种解决方法,您可以收集所有控制器方法和所有用
@PreAuthorize注释的方法(有一个 Spring util 类)。然后您可以从控制器方法列表中删除所有匹配的方法,以便该列表仅包含非安全方法。我不熟悉 Spring MVC,也不知道计算方法 URL 的简单方法。
标签: spring spring-mvc spring-security