繁体   English   中英

Spring boot REST API 中基于角色的字段级访问控制

[英]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- 为ADMINUSER创建不同的端点,只需使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM