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注释 ,使@Securedand@Pre/@Post维持. 注意:不需要去同时使用。 这种特殊情况下用来证明 Spring Data REST两个版本. | 
| 3 | 这个类继承了 Spring Security WebSecurityConfigurerAdapter用于纯Java配置的安全. | 
其余的配置类不列出,因为它遵循standard practices 你可以读到Spring Security参考文档.