【问题标题】:Need to sanitize body of ResponseEntity in Java 8需要在 Java 8 中清理 ResponseEntity 的主体
【发布时间】:2020-04-05 17:22:37
【问题描述】:

我正在运行 Java 8、Tomcat、DynamoDB 堆栈。我有这个方法:

@GET
@Path("/{var:.*}")
@Produces(MediaType.APPLICATION_JSON)
public Response mirrorRest(@Context UriInfo info, @Context HttpHeaders headers, @Context HttpEntity entity,
                               @PathParam(value = "var") String var) throws URISyntaxException {
        URI uri = new URI("https", server, null, null);
        UriComponentsBuilder builder = UriComponentsBuilder.fromUri(uri);
    builder.path(var);
    for(String key : info.getQueryParameters().keySet()){
        if(!key.equals("key")){
            String queryParam = StringEscapeUtils.escapeHtml(info.getQueryParameters().get(key).get(0));
            builder.query(key+ "=" + queryParam);
        }
    }
    builder.query("key="+API_KEY);
    RestTemplate restTemplate = new RestTemplate();

    try {    
        ResponseEntity response = restTemplate.exchange(builder.build().toUri(), HttpMethod.GET, entity, String.class);

        Object responseBody = response.getBody();

        return Response.ok(response.getBody()).build();
    } catch(HttpStatusCodeException e) {
        return Response.status(e.getStatusCode().value()).entity(e.getResponseBodyAsString()).build();
    }
}

有一次我正在阅读springframework.http.HttpEntity,创建一个ResponseEntity。但是,我想在输出之前对正文进行消毒以避免 XSS。这是我还没弄清楚该怎么做,因为getBody() 将返回一个Object

Object responseBody = response.getBody();

关于如何处理这个Object 以确保它被清理的任何想法?

【问题讨论】:

    标签: java spring xss sanitization


    【解决方案1】:

    也许就是这样

    ResponseEntity<String> response = restTemplate.exchange(builder.build().toUri(), 
                HttpMethod.GET, entity, String.class);
    
    String responseBody = response.getBody();
    

    ResponseBody 是具有可能类型参数化的响应主体的容器。

    如果您期望一些 JSON 可序列化的内容,最好使用可以将此 JSON 反序列化到的适当类参数化 ResponseEntity

    【讨论】:

      【解决方案2】:

      您可以使用以下代码

       try {    
          ResponseEntity<String> response = restTemplate.exchange(builder.build().toUri(), HttpMethod.GET, entity, String.class);
      
          String responseBody = response.getBody();
      
          return Response.ok(response.getBody()).build();
      } catch(HttpStatusCodeException e) {
          return Response.status(e.getStatusCode().value()).entity(e.getResponseBodyAsString()).build();
      }
      

      现在你的 getBody() 将返回 String。

      【讨论】:

      • 谢谢你,很好的回答!
      猜你喜欢
      • 1970-01-01
      • 2018-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多