【发布时间】:2016-06-01 21:57:34
【问题描述】:
使用 Sring Data JPA、Spring Data REST 2.4.2、Spring Security 和 Spring Boot 1.3.1。我有一个 Account 实体,我想通过 REST 公开以用于管理目的:
@PreAuthorize("hasRole('ROLE_ADMIN')") //exclusive admin access
public interface AccountRepository extends JpaRepository<Account, Long> {}
这按预期工作,我可以使用适当的管理员角色访问 REST 界面。
我的另一个要求是允许非管理员用户通过 HTTP 进行注册和身份验证。为此,我创建了一个自定义控制器,它通过 /register 和 /login 资源公开 register() 和 login() 功能。问题是当注册/登录内部逻辑与上面的 repo 交互时,除了匿名之外,没有可以附加的用户安全上下文。
为简单起见,我创建了第二个未导出且没有安全要求的存储库:
@RepositoryRestResource(exported = false)
public interface AccountRepositoryInternal extends JpaRepository<Account, Long> {}
然后将这个 repo 注入到上述控制器中。
问题是我看到导出界面的行为不一致。在某些运行时环境中,接口是通过 REST 导出的,而在其他环境中则不是。我可以使用更好的策略吗?
【问题讨论】:
-
最后......我整个早上都在拔头发。我已经创建了 2 个存储库并且出现了奇怪的行为并且无法弄清楚。我终于搜索了 2 个 repos 并得到了你的问题。我已经设置了 PreAuthroize 一个方法级别,但直到我看到你也有它之前,我无法弄清楚我得到的奇怪行为
标签: spring-security spring-boot spring-data spring-data-rest