繁体   English   中英

在响应中隐藏敏感信息

[英]Hiding sensitive information in response

我目前正在一个项目中工作,在该项目中我有一个用户模型并使用 REST API 来获取用户列表。 (我有更多的实体)。

用户有一个密码字段。 我不想在结果中包含密码字段。 所以我在 DTO 中排除了它。 但是当我想创建一个用户时,我想在请求中包含密码。 所以 Spring MVC 获得了 User 实体(而不是 DTO)。

我认为这样做不好......例如,我有事件模型,它通过多对多关系连接到用户。 我不希望在请求中出现这种情况。 我只想要用户。 那你建议我怎么做? 有另一种 DTO 吗?

提前致谢。

@JsonIgnoreAccess.WRITE_ONLY用于 getter 方法

例子

@JsonProperty(access = Access.WRITE_ONLY)
private String password;

如果您使用 jackson 序列化您的响应对象,您可以使用 @JsonIgnore 注释有问题的属性,它不会包含在响应中。

public User {
    private String email;

    @JsonIgnore
    private String password

    ...getters and setters

}

创建仅包含您想要的字段的单独响应对象也可能是一个好主意,以防您在路上添加敏感字段而忘记隐藏它们。 同样,您也可以使用单独的请求对象来创建包含密码字段的用户。 像用户这样的业务实体可能最好只在内部使用,这样您就可以控制公开哪些信息。

为避免使用 @JsonIgnore,您可以使用json-view library 例如,在您的控制器中,您可以执行以下操作:

首先在您的控制器变量中声明:

private JsonResult json = JsonResult.instance();

然后使用这个方法:

@RequestMapping("/get/{id}")
public void getUserById(@PathVariable(value = "id") long id) {
    User user = usersService.findOne(id);
    json.use(JsonView.with(user)
            .onClass(User.class, Match.match()
                    .exclude("password").exclude("yetAnothertopSecretField")));
}

它返回没有排除字段的 JSON。

JsonView、JsonResult 类是从 json-view 库中导入的。

我试过这个JsonProperty.Access.WRITE_ONLY并且它正在和我一起工作。

@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)

在发送响应时将字段 'password' 设为 null,Jackson 不会在响应中显示该字段,不要将其从模型类中完全删除。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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