我正在使用Java / Jersy框架(Tomcat)开发REST API。其中一个web服务的功能是将请求重定向(HTTP 302)到S3签名URL以获取文件。我们使用“Authorization”标头来检查请求的有效性。当调用此Web服务时,服务会生成带有签名的URL并重定向到已签名的URL。
REST Web服务中的Java代码(uri是已签名的URL)
return Response.status(HttpStatus.SCMOVEDTEMPORARILY).location(uri).build();
当重定向发生时,Authorization头也会随着签名一起传递。由于Amazon接受签名URL中的Authorization或Signature,但不接受两者同时存在,因此Amazon S3会抛出以下错误..
只允许一个认证机制; 仅应指定X-Amz-Algorithm查询参数、Signature查询字符串参数或Authorization头部
是否有办法在重定向时删除此头部发送...
我尝试添加一个过滤器,并使用自定义的HttpServletResponseWrapper实现覆盖ServletResponse,并在addHeader和setHeader方法中记录头部名称。然而Authorization头部从未调用该方法。
修改后的代码将头部设置为空也无法工作..
return Response.status(HttpStatus.SCMOVEDTEMPORARILY).location(uri).header("Authorization",null).build();
return Response.status(HttpStatus.SCMOVEDTEMPORARILY).location(uri).header("Authorization","").build();