AWS ELB配置HTTPS转HTTP时,Jersey中scheme的问题
来源:互联网 发布:停车场收费查询软件 编辑:程序博客网 时间:2024/06/05 00:17
AWS ELB配置HTTPS转HTTP
这个时候,后端instance收到的请求就是http,如果你使用了类似UriInfo.getBaseUri这样的方法去构造HATEOS,那么你返回的URI就会是http://api.server.com/,而非https://api.server.com/
读ELB相关文档,ELB会在request上加上X-Forwarded-Proto,所以,我们可以在jersey中加一个prefilter,查看是否有该配置,如果有,则修改UriBuilder中的scheme即可。代码如下
@PreMatching
public class ForwardedProtocolFilter implements ContainerRequestFilter {@Override
public void filter(ContainerRequestContext ctx) throws IOException {
String scheme = getValue(ctx.getHeaders(), "X-Forwarded-Proto");
String port = getValue(ctx.getHeaders(), "X-Forwarded-Port"); // For Grizzly
if (scheme == null && port == null)
return;
UriBuilder baseBuilder = ctx.getUriInfo().getBaseUriBuilder();
UriBuilder requestBuilder = ctx.getUriInfo().getRequestUriBuilder();
if (scheme != null) {
baseBuilder.scheme(scheme);
requestBuilder.scheme(scheme);
}
if (port != null) {
int nPort = Integer.parseInt(port);
baseBuilder.port(nPort);
requestBuilder.port(nPort);
}
// maake sure to set both base and request URIs
ctx.setRequestUri(baseBuilder.build(), requestBuilder.build());
}
private String getValue(MultivaluedMap<String, String> headers, String header) {
List<String> values = headers.get(header);
if (values == null || values.isEmpty())
return null;
return values.get(0);
}
}
附:如果你在ELB后面配了nginx,那么需要配置nginx的proxy_pass_header X-Forwarded-Proto;
location ^~ /about {
proxy_set_header Host $host;
proxy_pass_header X-Forwarded-Proto;
...
}
参考资料:
http://jersey.576304.n2.nabble.com/UriInfo-oddness-on-Jetty-vs-Grizzly-td7582020.html
http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/TerminologyandKeyConcepts.html#proxy-protocol
0 0
- AWS ELB配置HTTPS转HTTP时,Jersey中scheme的问题
- AWS-elb-http504问题
- aws 上使用elb 的多域名问题
- AWS ELB技术要点
- AWS ELB 使用过程中由于协议认知不足引发的血案(AWS Elastic Load Balancing 与WebSocket并用报错)
- nginx中配置https的服务页面中引用http资源问题
- AWS EC2服务器的HTTPS负载均衡器配置过程
- windows apache http转https的问题
- Jersey入口配置问题
- Jersey使用中遇到的问题
- 面试中关于TCP UDP HTTP HTTPS的问题
- 解决Nginx+Tomcat中https转http请求问题
- Jersey框架三:Jersey对HTTPS的支持
- Jersey框架三:Jersey对HTTPS的支持
- WebView中Http和Https混合问题
- https的配置以及php中判断问题
- Jersey Client基于Https的Basic Authorization
- 解决http转https在chrome里blocked的问题
- Apache开源软件
- Zookeeper开发常见问题
- js中定义类的方法
- 小栗子说明Django中如何使用JQuery实现Ajax
- UVA - 133 The Dole Queue
- AWS ELB配置HTTPS转HTTP时,Jersey中scheme的问题
- 关于Android系统的”点九
- d
- 关于C++ const 的全面总结(个人感觉一般般)
- Socket编程创建对话框模式的项目时忘记选择 windows”套接字”的解决办法!
- Java 实现简单工厂模式
- 创建桌面快捷方式
- output_buffering设置引起不能显示warning信息
- 好书读后感