【问题标题】:spring REST repository - modify returned response fieldspring REST存储库-修改返回的响应字段
【发布时间】:2018-04-18 17:16:59
【问题描述】:

我刚刚开始使用 Spring,希望有知识的人可以帮助我。我有一个使用弹簧休息数据的弹簧休息存储库。我正在尝试解决以下问题。

  1. 当请求进来时访问经过身份验证的用户,并根据用户属性,根据他们是否具有此属性来屏蔽存储库响应字段之一。例如,请求进来获取数据列表。但是在我们返回数据之前,我们会检查用户是否已经“付费”,然后将数据保持原样,或者如果他们没有,则更改响应字段以屏蔽该内容并将“内容字段值”替换为“...... “ 例如。这可以使用标准 repo 来完成,还是我需要更改为控制器并重做所有代码?示例代码如下:

    公共接口 ReadOnlyRepository 扩展 Repository { T findOne(ID id);

    Iterable<T> findAll();
    
    Iterable<T> findAll(Sort sort);
    
    Page<T> findAll(Pageable pageable);
    

    }

    公共接口 ContentRepository 扩展 ReadOnlyRepository<...> {

    }

    // 我需要用 '...' 即时替换的字段 @实体 公共类内容{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
    
    @Column(nullable = false)
    private String content;
    

    }

【问题讨论】:

    标签: spring spring-mvc spring-data-jpa spring-rest


    【解决方案1】:

    假设你已经设置了 Spring SEcurity 上下文,你可以在你的 Entity 类的 getContent() 方法中执行如下操作

    public String getContent(){
    
        Authentication auth = 
        SecurityContextHolder.getContext().getAuthentication();
        if( auth.getAuthorities().contains(new SimpleGrantedAuthority("ADMIN"))) {
        return content; 
        }else{
           return "...";
        }
    
    }
    

    【讨论】:

    • 谢谢。这大致就是我想要的。我需要使用的 db 字段来自用户数据库表,而不是授予的权限或范围。基本上,我使用 oauth2 登录用户,他们使用令牌访问 api。安全上下文是否可以使用此令牌访问用户以进行身份​​验证,我能否以与授予权限相同的方式访问用户实体字段?
    • Richard,在 spring 中编写一个简单的身份验证过滤器,处理令牌,将其与数据库中的用户匹配并填充安全上下文。这是一个完美的用例。安全上下文用于存储身份验证详细信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多