![](/img/trans.png)
[英]How to implement field level access control for REST service based on the caller?
[英]Role based field level access control in Spring boot REST API
我有一个具有 GET 端点的 Spring Boot REST API,它从数据库中获取用户详细信息。
public class User{
@JsonProperty
private String userName;
@JsonProperty
private String userAge;
@JsonProperty
private String userAddress;
}
我有 2 个用户 - user1 和 user2 分别具有角色“ADMIN”和“USER”。 我的要求是,如果请求 API 的用户具有“ADMIN”角色,则字段userAge
应仅在 JSON 响应中发送给消费者。
Spring boot 中是否有标准的方式来实现字段级访问控制?
请注意 - 我已经搜索了有关堆栈溢出的类似问题,但答案包括不属于 Spring Boot 框架的一部分并且是实现它的较旧方法的解决方案。 我特别在寻找一种使用 Spring Boot 实现这一目标的标准方法。
我希望这回答了你的问题。
首先想到的是使用 Jackson @JsonViews,
短裤
大多数情况下,我们会遇到应用程序中的需求,我们希望向不同的客户端/用户提供相同模型数据的不同视图。
为了解决这个问题,我们最终可能会创建多个模型/DTO 来向不同的客户端表示相同状态的不同视图。 对于字段数量有限的模型,这种方法可能有效,但对于大型模型,将变得难以管理并会导致代码重复。
因此,您定义了两种不同的视图,一种用于ADMIN
,一种用于USER
,然后您有两个选项,其中第一个非常适合您的问题。
1-基于条件检查的序列化和反序列化,您可以从应用程序安全上下文中获取user
,检查角色并根据正确的View
反序列化。
2- 为ADMIN
、 USER
创建不同的端点,只需使用annotation
驱动的开发即可返回您需要的视图,而无需进行角色检查。
这两个选项本机都支持,但我建议使用第一个选项来封装 API。
本文涵盖了这两个选项,请看一看它是否与您的用例匹配,我当然希望它可以。
参考: https : //www.linkedin.com/pulse/jackson-jsonview-its-meaningful-use-spring-boot-rest-amit-patil/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.