spring boot rest api中基于java角色的字段级访问控制

e3bfsja2  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(442)

我有一个SpringBootRESTAPI,它有一个get端点,可以从数据库中获取用户详细信息。

public class User{

    @JsonProperty
    private String userName;
    @JsonProperty
    private String userAge;
    @JsonProperty
    private String userAddress;

}

我有两个用户——分别是角色为“admin”和“user”的user1和user2。我的要求是 userAge 仅当请求api的用户具有“admin”角色时,才应在json响应中发送给使用者。
spring boot中是否有实现现场级访问控制的标准方法?
请注意——我已经搜索过关于堆栈溢出的类似问题,但答案包括解决方案,这些解决方案不是spring boot框架的一部分,而是实现它的旧方法。我特别寻找一种使用SpringBoot实现这一点的标准方法。

nxagd54h

nxagd54h1#

我希望这能回答你的问题。
首先想到的是使用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/

相关问题