【发布时间】:2015-04-19 05:06:30
【问题描述】:
我有一个 User 类,我想授权访问,这样只有用户才能看到他有权访问的内容。
使用 Spring Security 和 Spring Data Rest 很容易实现这一点,我在下面的 JPA Repository 中做了 -
public interface UserRepository extends JPARepository<User,Integer> {
@PreAuthorize("hasRole('LOGGED_IN') and principal.user.id == #id")
User findOne(@Param("id") Integer id);
}
这样,用户在访问 Spring Data REST 脚手架 URL 时就像 -
/users/{id}
/users/{id}/userPosts
只有使用 {id} 登录的人才能看到这些,而其他所有人都会像我想要的那样获得 401。
我的问题是我有一个 Projections,它是每个用户的公共视图,我正在使用 Spring Data Rest 投影创建它,如下所示,我希望每个 {id} 都可以访问它
@Projection(name = "details", types = User.class)
public interface UserDetailsProjection {
..
}
所以,/users/{id1}?projection=details 和 /users/{id2}?projection=details 应该给出 200 OK 并显示数据,即使用户是通过 {id1}
我开始通过使用@PreAuthorize("permitAll") 标记投影来实现这一点,但这不会起作用,因为存储库有更严格的安全检查。我们可以在投影的地方拥有这个功能吗?我们可以放松安全性吗?
我正在使用最新的 Spring Data Rest 和 Spring Security 发行版
【问题讨论】:
标签: spring spring-security spring-data spring-data-rest