需要在 Java 8 中清理 ResponseEntity 的主体
Need to sanitize body of ResponseEntity in Java 8
我是运行一个Java8,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()
将 return 和 Object
:
Object responseBody = response.getBody();
关于如何处理这个Object
以确保它被清理的任何想法?
也许就是这样
ResponseEntity<String> response = restTemplate.exchange(builder.build().toUri(),
HttpMethod.GET, entity, String.class);
String responseBody = response.getBody();
ResponseBody 是具有可能类型参数化的响应主体的容器。
如果您希望获得一些 JSON 可序列化的内容,最好使用适当的 class 参数化 ResponseEntity
,以便此 JSON 可以反序列化。
您可以使用以下代码
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() 将 return String.
我是运行一个Java8,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()
将 return 和 Object
:
Object responseBody = response.getBody();
关于如何处理这个Object
以确保它被清理的任何想法?
也许就是这样
ResponseEntity<String> response = restTemplate.exchange(builder.build().toUri(),
HttpMethod.GET, entity, String.class);
String responseBody = response.getBody();
ResponseBody 是具有可能类型参数化的响应主体的容器。
如果您希望获得一些 JSON 可序列化的内容,最好使用适当的 class 参数化 ResponseEntity
,以便此 JSON 可以反序列化。
您可以使用以下代码
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() 将 return String.