14. 安全
Spring Data REST有Spring Security可以更好的工作. 本节将展示一些例子如何去保护你的Spring Data REST服务 method level security.
14.1. @Pre and @Post 安全
下面来自Spring Data REST Spring测试套件的示例显示了Spring Security的安全性 PreAuthorization model, the most sophisticated version:
例 5. spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc//security/PreAuthorizedOrderRepository.java
未解决的安全指令。adoc——包括::../../../spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc//security/PreAuthorizedOrderRepository.java[tag=code]
这是一个标准的Spring Data 存储库定义伸展 CrudRepository
的一些关键的变化.
1 | 这个 Spring Security 注解保护整个存储库. Spring Security SpEL expression 表明主要有 ROLE_USER 在他集合中. |
---|---|
2 | 更改方法级别设置, 你必须覆盖类函数的署名并应用 Spring Security 注解. 在这种情况下, 有 ROLE_ADMIN 的用户去执行删除,覆盖储存库层次的设置要求的方法 . |
不要把存储库和方法级安全性设置联合起来. 反而, 方法级设置 override 库级设置. | |
---|---|
前面的例子说明了 CrudRepository
, 事实上, 有四个删除方法. 你必须覆盖所有的删除方法去恰当的保护它.
14.2. @Secured 安全
下面的例子展示了Spring Security @Secured
旧版本的注释, 仅仅是基于:
例 6. spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc//security/SecuredPersonRepository.java
未解决的安全指令。adoc——包括::../../../spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc//security/SecuredPersonRepository.java[tag=code]
1 | 这导致一样的安全检测, 但是灵活性更少.它只允许角色的限制访问. |
---|---|
2 | 再一次表明删除方法要求 ROLE_ADMIN. |
如果你开始一个新项目或首次应用 Spring Security, @PreAuthorize 是推荐的解决方案. 如果已经使用 Spring Security @Secured 在你的应用程序的其他部分, 在没有重写任何东西的情况下可以继续这条路径. |
|
---|---|
14.3.启用方法级安全性
配置方法级安全性, 这是来自Spring Data REST测试套件的简单的片段:
例 7. spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc//security/SecurityConfiguration.java
未解决的安全指令。adoc——包括::../../../spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc//security/SecurityConfiguration.java[tag=code]...}
1 | 这是一个Spring配置类. |
---|---|
2 | 它使用 Spring Security的 @EnableGlobalMethodSecurity 注释 ,使 @Secured and @Pre /@Post 维持. 注意:不需要去同时使用。 这种特殊情况下用来证明 Spring Data REST两个版本. |
3 | 这个类继承了 Spring Security WebSecurityConfigurerAdapter 用于纯Java配置的安全. |
其余的配置类不列出,因为它遵循standard practices 你可以读到Spring Security参考文档.