【发布时间】:2015-05-01 21:09:07
【问题描述】:
我正在使用当前版本的Spring Data Rest 和Spring Data JPA 并拥有以下实体:
public class User {
@Id
@GeneratedValue
private Long id;
private String name;
private String password;
private String email;
...getter/setter methods...
}
我也在使用Spring Security。
我的用户存储库:
@RepositoryRestResource(
collectionResourceRel = "user",
path = "user",
excerptProjection = UserSimpleProjection.class)
public interface UserRepository extends PagingAndSortingRepository<User, Long> {
}
例如:
- 用户 1 已登录
- 用户 1 请求
http://localhost:8080/user/1- 所有字段都可见 - 用户 1 请求
http://localhost:8080/user/2- 只有id和name可见。
我与 Jackson 尝试了不同的解决方案,但都没有解决我的问题:
-
JsonView 的使用:我没有办法,根据登录的用户更改
ObjectMapper的视图 - 按照here 的描述实现了不同的 Jackson 过滤器,但我发现无法针对不同的请求更改
ObjectMapper配置。
然后我找到了Projections。
我创建了一个投影:
@Projection(name = "simple", types = User.class)
public interface UserSimpleProjection {
public Long getId();
public String getName();
}
还有一个详细的:
@Projection(name = "detailed", types = User.class)
public interface UserDetailProjection extends UserSimpleProjection{
public String getEmail();
}
到目前为止一切顺利,根据我的要求,我得到了不同的结果。
有没有办法根据 Spring Security 自动切换投影和/或限制不同角色的不同投影?
【问题讨论】:
-
您是否有机会根据角色进行预测?
-
不,对不起。我当时放弃并制作了自定义控制器。
标签: spring-security jackson spring-data-jpa spring-data-rest