可以通过以下示例定义问题:
我有一个类MainClass
,它与另一个名为AssociatedClass
的类有@OneToOne
关系。两者都有一个公开的存储库,所以我可以在URL /mainClasses/{some_id}
和URL /associatedClasses/{some_id}
上进行GET。但是,AssociatedClassRepository
具有以下代码:
@RepositoryRestResource
public interface AssociatedClassRepository extends PagingAndSortingRepository<AssociatedClass, String> {
@Override
@PreAuthorize("1 == 2")
AssociatedClass findOne(String s);
}
因此它永远不会将GET方法授权给类型为AssociatedClass
的对象。但是,由于MainClass
类型的对象关联了AssociatedClass
个对象,我可以通过/mainClasses/{some_id}/associatedClass
处的GET获取此对象。
我想阻止对/mainClasses/{some_id}/associatedClass
的访问,但不阻止对所有用户的访问。我想通过@PreCondition
以同样的方式定义一些条件。因此,只有在经过身份验证的用户是资源的所有者时才允许访问,这是我的真正目标。
有什么想法吗?
答案 0 :(得分:1)
一种选择是在URL级别保护Spring Data REST端点。例如:
@Override
public void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/entity/{[0-9]+}/{[A-Za-z][A-Za-z0-9]+}").hasRole("ADMIN").
and().csrf().disable();
}
}
公共访问:
管理员访问权限:
答案 1 :(得分:0)