如何在dto属性上使用SafeHtml注释?

时间:2019-04-26 08:25:34

标签: java spring rest api dto

我有一个dto,该dto取自另一个API(反编译类),在该dto中,一个字符串字段被标记为SafeHtml,以防止用户注入HTML脚本。

@NotNull
@SafeHtml(
    whitelistType = WhiteListType.NONE,
    groups = {Default.class}
)
@ApiModelProperty(
    value = "The label of customer",
    required = true
)
private String label;

但是当我通过邮递员或从前端发送请求时,例如<script>alert('blabla')</script>-,它仍然接受此输入并执行。

这里似乎有什么问题?其他工作示例是项目自己的dto类,但在此示例中,此dto是来自另一个api的反编译类,这可能是原因吗? (我不这么认为,因为此dto的api也接受它),那是什么问题呢?

还是仅指定SafeHtml还不够,我还需要做更多事情吗?

编辑:我的控制者是:

        @PostMapping("customer/save")
            @ApiOperation("Adds customer")
            public ResponseEntity<CustomerDto> saveCustomer(
                    @ApiParam("Customers to save") @RequestBody CustomerDti customerDto) {

    return ResponseEntity.ok(customerService.saveCustomer(customerDto);
}

并注意:如果我将safehtml放在我的模型类上,则可以,但是我不想要它。我想立即拒绝请求,因此我需要在dto类上将其禁用。

1 个答案:

答案 0 :(得分:1)

如前所述,约束注释是按需验证的。
对于您的情况,您必须添加@Valid批注以使请求有效:

@PostMapping("customer/save")
@ApiOperation("Adds customer")
public ResponseEntity<CustomerDto> saveCustomer(
        @ApiParam("Customers to save") @RequestBody @Valid CustomerDti customerDto) {

  return ResponseEntity.ok(customerService.saveCustomer(customerDto);
}