我在一个spring引导应用程序中有以下控制器,它接受并返回一个二进制流。我需要接受一个蒸汽,加密它,同时返回结果。这些流可能非常大,无法保存在内存中:
@PostMapping(value = "/encrypt-stream/", consumes = MediaType.APPLICATION_OCTET_STREAM_VALUE, produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
public void encryptStream(HttpServletRequest request, HttpServletResponse response){
OutputStream os = response.getOutputStream();
InputStream is = request.getInputStream();
String checksum = encryptionService.encrypt(is, os);
response.setHeader("checksum", checksum);
}
我需要发送一个标题( checksum
)基于服务呼叫的结果( encryptionService.encrypt()
)在控制器内。正在设置标题 HttpServletResponse
不起作用。
我已经看过了 Filter
但是,它只在您在 .doFilter()
打电话。我的问题是标题值是在计算之后。
同样,实现 HandlerInterceptorAdapter
.
1条答案
按热度按时间lh80um4z1#
我认为http对于流加密服务器来说可能是一个错误的选择。该协议的核心是先请求后响应,并不是为可能在请求完成之前就开始返回响应的用例而设计的。对于早期返回的错误代码也有例外,但是对这种行为的支持看起来不稳定。
请求前的http响应