在使用
Spring Data JPA和Spring Data REST的应用程序中,假设您有一个这样的实体类:
@Entity
public class Person {
@Id @GeneratedValue
private int id;
private String name;
@JsonIgnore
private String superSecretValue;
...
}
我们希望Spring Data REST为superSecretValue公开所有这个实体的字段EXCEPT,因此我们用@JsonIgnore注释了该字段.
但是,在某些情况下,我们要访问superSecretValue,因此我们创建一个投影,返回所有字段,包括:
@Projection(name = "withSecret", types = {Person.class})
public interface PersonWithSecret {
String getName();
String getSuperSecretValue();
}
真棒.所以现在我们可以访问包含superSecretValue字段的Person实体,如下所示:
curl http://localhost:8080/persons?projection=withSecret
我的问题是我们如何确保这一预测?我们如何配置这样的东西,以便任何人都可以在没有superSecretValue字段的情况下检索Person实体……但只有具有特定角色的人(例如,ROLE_ADMIN)才能使用投影来检索隐藏字段?
我发现了使用@PreAuthorize或@Secured注释来保护Spring Data JPA存储库CRUD方法(例如save(),delete())的无尽例子……但没有关于如何限制使用Spring Data REST投影的示例.