2016-02-12 65 views
1

可以说我有一个User实体,ManyToMany映射到UserGroup实体。如果我创建两个实体库,并获得URI /users/1,我得到的回应是这样的:弹簧数据保持安全HATEOAS链接

{ 
    "enabled" : true, 
    "password" : "xxxxxx", 
    "username" : "xxxxxx", 
    "credentialsNonExpired" : true, 
    "accountNonLocked" : true, 
    "accountNonExpired" : true, 
    "_links" : { 
    "self" : { 
     "href" : "http://127.0.0.1:45950/users/1" 
    }, 
    "user" : { 
     "href" : "http://127.0.0.1:45950/users/1" 
    }, 
    "userGroups" : { 
     "href" : "http://127.0.0.1:45950/users/1/userGroups" 
    } 
    } 
} 

这里的群组链接是非常有用的。

我可以使用/userGroups端点列出所有UserGroup。 我想保护/userGroups端点和/users/1/userGroups端点使用不同的spring-security表达式。

使用参考这里:http://docs.spring.io/spring-data/rest/docs/current/reference/html/#security我知道如何确保第一个端点:

public interface UserGroupRepository extends PagingAndSortingRepository<UserGroup, Long> { 

    @PreAuthorize("hasRole('ROLE_ADMIN')") 
    @Override 
    Iterable<T> findAll(); 
} 

但是我怎么保证第二端点?目前甚至有可能吗?有没有一些工作计划在这个功能上。我很乐意贡献。

回答

1

我也遇到过这个问题,没有找到任何解决Spring的安全注解的解决方案。作为一种变通方法,我沿着线补上一:

@Override 
protected void configure(HttpSecurity http) throws Exception { 
    http 
     // Whatever config you already have. 
     .authorizeRequests() 
      .antMatchers("https://stackoverflow.com/users/*/userGroups").hasRole("ADMIN"); 
} 

我实施WebSecurityConfigurerAdapter。虽然这可以起作用,但它会重复在保护存储库时完成的工作,并且在添加新存储库时很容易忘记添加java config和annotations。