我正在AWS中运行一个SpringBoot应用程序。应用程序在弹性负载平衡器(ELB)后面运行。ELB被配置为对外使用https
(端口443(端口
8080
)传递给应用程序。ELB配置为通过x-forwarded-poto
标头。我正在使用Jetty9.0.0.M0
和Spring Boot1.1.5 RELEASE。
我似乎收到了通过ELB从应用程序发送回来的错误重定向,其中重定向响应以
http而不是https
的形式返回。现在,我在这里读到我应该使用“转发”标头设置为
true
:
<Set name="forwarded">true</Set>
我无法看到如何在Spring启动中使用嵌入式版本的 Jetty 执行此操作,因为没有 XML 配置文件作为我的源代码的一部分。
我已经看过
嵌入式Servlet容器客户端基础架构,
但我仍然无法获得正确的咒语来使此设置正常工作。
应用程序是在AWS
https
环境之外构建和测试的,因此应用程序也需要透明地使用超文本传输协议
。无需通过ELB直接访问应用程序endpoint就可以工作。只是ELB到应用程序的路由不起作用。
有什么想法吗?
这是我们刚刚使用的Spring应用程序jetty-runner-9.3.6.jar.在我们的例子中,我们的jetty.xml已经没有任何addConnector,尝试只添加addConnector会出错。
在这里找到的-https://github.com/george-hawkins/authsite/blob/2c5d61b984a328ef878216a3acfd0ad2593f81b1/src/main/config/etc/jetty.xml
<New id="httpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
<Call name="addCustomizer">
<Arg><New class="org.eclipse.jetty.server.ForwardedRequestCustomizer"/></Arg>
</Call>
</New>
<Call name="addConnector">
<Arg>
<New class="org.eclipse.jetty.server.ServerConnector">
<Arg name="server"><Ref refid="Server" /></Arg>
<Arg name="factories">
<Array type="org.eclipse.jetty.server.ConnectionFactory">
<Item>
<New class="org.eclipse.jetty.server.HttpConnectionFactory">
<Arg name="config"><Ref refid="httpConfig" /></Arg>
</New>
</Item>
</Array>
</Arg>
<Set name="port"><SystemProperty name="jetty.port" default="8080"/></Set>
</New>
</Arg>
</Call>
这样做的目的是修改传递的请求对象,使它看起来像不是通过代理传递的(用任何可用和支持的X-Forwarded头替换细节)。
请参阅 http://archive.eclipse.org/jetty/9.0.0.M4/apidocs/index.html?org/eclipse/jetty/server/ForwardedRequestCustomizer.html
此定制器查看 HTTP 请求,以指示它已由一个或多个代理转发的标头。具体处理的有:
如果这些标头存在,则更新Request对象,这样代理就不会被视为请求所来自的连接的其他终端
我发现默认的Spring Boot Jetty配置有几个问题,尤其是SSLLabs Check不喜欢启用的SSL算法。
总之:我找到的解决方法是这样的:
@Bean
public JettyEmbeddedServletContainerFactory jettyEmbeddedServletContainerFactory()
{
// Deploy the nuclear option, kill the default Spring Boot factory
// and replace with mine that disables extra crud.
JettyEmbeddedServletContainerFactory fac = new JettyEmbeddedServletContainerFactory();
// This allows ELB to work.
fac.setUseForwardHeaders( true );
return fac;
}
如果您想要端到端SSL,还需要设置许多其他ELB选项。我不得不使用命令行客户端进行一些调整,并将健康检查更改为TCP:8443 b/c,负载平衡器认为EC2实例证书无效。
我自己也有类似的问题,在研究过程中偶然发现了你的问题。我发现这很容易编程,但在Jetty文档中并没有真正解释。
Jetty xml配置文件的结构与javaAPI的结构相匹配,因此您可以在代码中复制它。
因此,请按照 Jetty 指南了解如何在此处使用 XML 配置文件进行配置
我能够像这样编程地配置嵌入式服务器:
Server server = new Server( port );
// Create HTTP Config
HttpConfiguration httpConfig = new HttpConfiguration();
// Add support for X-Forwarded headers
httpConfig.addCustomizer( new org.eclipse.jetty.server.ForwardedRequestCustomizer() );
// Create the http connector
HttpConnectionFactory connectionFactory = new HttpConnectionFactory( httpConfig );
ServerConnector connector = new ServerConnector(server, connectionFactory);
// Make sure you set the port on the connector, the port in the Server constructor is overridden by the new connector
connector.setPort( port );
// Add the connector to the server
server.setConnectors( new ServerConnector[] { connector } );
我想尝试使用嵌入式jmxtrans的基本入门示例。所以我添加了下面的代码 添加while循环是为了使应用程序保持最新状态,直到jvm统计信息打印到控制台上。这是jmxtrans。json文件 在启用调试级别日志时,我发现jmxtrans Spring bean没有创建,因为Spring循环引用错误 调试o. s. b. f. s.DefaultListableBeanFactory 1426-忽略
我找不到任何可行的例子。实际上有一个,https://github.com/ekito/spring-boot-gwt,但是所有的依赖项和配置仍然处于战争状态。 有人能提出解决办法吗?
尝试启动Tomcat时出现一个通用错误。下面是StackTrace: 下面是POM:http://maven.apache.org/maven-v4_0_0.xsd“>4.0.0 edu.rutgers spring-social-orcid-client-boot spring-social-orcid-client-boot 1.1.0 多谢了。
这将启动一个嵌入式Tomcat实例,这很好。 问题是,其他配置文件不需要嵌入式服务器(例如,我使用JMS来处理传入的消息,而不是REST)。 有什么方法可以阻止在默认情况下启动Tomcat,并且只在REST配置类中使用它?例如,通过使用注释该类 谢谢
我正在做一个测试项目,为我们未来的项目尝试SpringBoot。 我们正在使用jasig CAS,我正在尝试配置Spring Boot和嵌入式tomcat服务器。 所以我加入了pom。xml spring启动程序安全性 之后,我尝试配置WebSecurityConfig- 这里是第一个问题:类组织。springframework。安全中科院。网状物应用程序未重新确认CasAuthenticatio
英文原文:http://emberjs.com/guides/configuring-ember/embedding-applications/ 大多数情况下,应用所有的UI都将通过路由器管理的模板来创建。 但是如果需要将一个Ember.js应用嵌入一个现有的网页,与其他的Javascript框架共存应该怎么做呢? 改变根元素 缺省情况下,应用将渲染应用模板到网页的body元素中。 通过指定roo