可以通过以下示例定义该问题:
我有一个类MainClass,通过@OneToOne关系与另一个名为AssociatedClass的类相关.两者都有一个暴露的存储库,所以我可以在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以同样的方式定义一些条件.因此,只有在经过身份验证的用户是资源的所有者时才能允许访问,这是我的真正目标.
有任何想法吗?
最佳答案 一种选择是在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();
}
}
公共访问:
> /实体
> / entities / entityId
管理员访问:
> / entities / entityId /关联实体