如何按角色限制对 Spring Data REST 投影的访问?

2024-05-19

在使用 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,所以我们用这个字段注释了@JsonIgnore.

然而,在某些情况下,我们确实希望访问superSecretValue,因此我们创建一个投影,它将返回包括该字段在内的所有字段:

@Projection(name = "withSecret", types = {Person.class})
public interface PersonWithSecret {

   String getName();
   String getSuperSecretValue();

}

惊人的。现在我们可以访问Person实体包括 the superSecretValue像这样的字段:

curl http://localhost:8080/persons?projection=withSecret

我的问题是我们怎样才能确保这一点投影?我们如何配置以便任何人都可以检索Person实体without the superSecretValue领域......但仅限于具有特定角色的人(例如,ROLE_ADMIN)可以使用投影来检索隐藏字段吗?

我发现了无数使用的例子@PreAuthorize or @Secured用于保护 Spring Data JPA 存储库 CRUD 方法的注释(例如save(), delete())...但没有如何限制 Spring Data REST 投影的使用的示例。


您可以使用重载投影中的属性@Value使用条件 SpEL 表达式 - 就像这样已经回答过类似问题 https://stackoverflow.com/questions/28794145/spring-data-rest-security-based-projection/35399030#35399030.

考虑其他替代方案(其他方案已经提到):

  1. 模型重构。按访问逻辑拆分实体(例如PersonAccount)
  2. 添加自定义端点以进行特殊逻辑和访问检查。例如,当前用户位于“/people/me”。
  3. 自定义标准端点。例如,为“/people”、“/people/{id}”添加自定义控制器,该控制器将预处理并返回自定义Resource类型(DTO)取决于用户权限(例如返回PublicPerson反而Person)。然后,您可以编写自定义资源处理器来添加这些类型的自定义链接和自定义投影。

另请参阅: spring-data-rest 关于此主题的问题数据休息-428 https://jira.spring.io/browse/DATAREST-428.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何按角色限制对 Spring Data REST 投影的访问? 的相关文章

  • Volley 在第一次调用方法时返回 null

    我正在尝试使用 volley 从服务器检索数据 但是当我第一次调用此方法时 我收到服务器的响应 但该方法返回 null 如果我第二次调用它 我会得到最后的响应 public String retrieveDataFromServer Str
  • 将其元素添加到另一个列表后清除列表

    我正在做一个程序 它获取更多句子作为参数 我制作了 2 个列表 一个称为 propozitie 其中包含每个句子 另一个称为 propozitii 其中包含所有句子 问题是 当我在遇到 后清除 propozitie 列表时 它也会清除 pr
  • Java中char数组的默认值是多少?

    如果我像这样分配字符数组 char buffer new char 26 它分配的默认值是什么 我尝试打印它 但它只是一个空字符 System out println this is what is inside gt buffer 1 t
  • Java制作一条有向线并使其移动

    我想画一条有向线并让它移动 我能够绘制一条有向线并移动该线 但当我移动该线时箭头会移位 这是我的绘画方法 Line2D Double line new Line2D Double startX startY endX endY g2d dr
  • 放置 时覆盖引导程序的托管版本 3.2.0

    当我把
  • Spring引导错误

    我正在使用 Spring BOOT 运行一个简单的桌面应用程序 下面是错误堆栈 org springframework beans factory BeanCreationException Error creating bean with
  • POJO 到 Google App Engine 中的 XML 字符串?

    我想为我的 Java Google App Engine 程序创建一个 REST 接口 我想我应该从我的 POJOS 生成一些 XML 开始 然而 XStream似乎受到了GAE的限制 我可以使用什么在 Google App Engine
  • 如何以最短的等待时间加速 Java Selenium 脚本

    我目前正在开发一个 java selenium 项目 这通常是一个小脚本 我必须在其中检查每个元素是否存在 并基于触发一些操作 但我们主要关心的是完成脚本的持续时间 基本上 我在脚本中使用了下面的每一个并运行了测试 尽管在每种情况下脚本都在
  • 多模块项目的 Maven 报告和站点生成

    我正在尝试使用子模块来正确测试和生成报告 但遇到了一些问题 我有以下项目结构 parent test1 test2 和 pom xml 的parent看起来像这样
  • Java:ImageIcon 与 Image 的区别

    谁能以菜鸟的方式向我解释一下两者之间有什么区别图像图标 and ImageJava 中的类 对象 谢谢 它们的性质和应用是不同的 Image http docs oracle com javase 6 docs api java awt I
  • 用于 Eclipse Galileo 的 Java“clone()”方法生成器

    java最好的工具是什么clone Eclipse Galileo 中的方法生成可从存储库中获取吗 是什么原因阻止 Eclipse 开发人员将此工具包含在标准版本中 实施起来非常困难clone 正确的 这样做被认为不是一个好的做法 Bloc
  • 如何以编程方式搜索 Google Java API [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有谁知道是否以及如何以编程方式搜索 Google 特别是如果有 Java API 的话 一些事实 Goo
  • 关于 ArrayList[] x 的 Java 问题

    我一直对 ArrayList 数组有这个问题 也许你能帮忙 declare in class private ArrayList
  • 如何在 Spring 中将多个映射合并为一个

    我的上下文文件中定义了几个地图 有没有一种方法可以将这些映射组合成一个包含其所有条目的映射 而无需编写 Java 代码 并且无需使用嵌套映射 我正在寻找 Map m new HashMap 的等效项m putAll carMap m put
  • Java - 通过相对路径加载dll并将它们隐藏在jar中

    PART 1 我正在开发一个 Java 应用程序 应该作为 jar 发布 该程序依赖于JNI调用的C 外部库 要加载它们 我使用以下方法System load使用绝对路径 效果很好 然而 我真的想将它们 隐藏 在 JAR 中 所以我创建了一
  • Gradle Output Jar 没有主类

    我有以下简单的 build gradle 文件 apply plugin application apply plugin java mainClassName com kurtis HelloGradle 以下单个 java 文件位于sr
  • Android webview 滚动不起作用

    我正在尝试在网络视图中向下滚动到页面底部 我正在使用谷歌在其教程中提供的网络视图示例 我正在使用这行代码来尝试滚动 但它不起作用 mWebView pageDown true 关于如何使其以编程方式滚动有什么建议吗 谢谢 public cl
  • Java 2d 游戏中的路径查找?

    本质上它是我正在开发的一款吃豆人克隆游戏 我有一个 Enemy 类 并创建了该类的 4 个实例 它们都代表游戏的 4 个幽灵 所有幽灵都会在屏幕的随机区域启动 然后它们必须朝着吃豆人角色前进 当玩家控制吃豆人并移动它时 他们应该跟随它并尽可
  • 如何使用 Apache POI API 将图像添加到 pptx 中添加的图像占位符?

    我已经预定义了带有文本和图像占位符的 pptx 模板 我如何从模板访问和修改这些占位符 我可以使用 POI pptx API 直接将图像和文本添加到幻灯片中 但如何将其添加到模板的占位符中 请参阅链接以了解如何添加占位符来创建固定模板 ht
  • 如何使用 Java 中的 Web 服务(例如 Axis2)发送复杂对象的数组或集合?

    我对 SOAP Web 服务还比较陌生 虽然我完成了一些较小的 Web 服务项目 但我偶然从来不需要返回 或用作参数 复杂 对象的数组或集合 当我尝试这样做时 根据我的 SOAP 绑定风格 我会得到不同的奇怪行为 当我使用RPC 文字 我可

随机推荐