spring-security – 如何保护关联资源?

可以通过以下示例定义该问题:

我有一个类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 /关联实体

点赞