我在JBoss-5.1.0上部署了一个Java EE应用程序。为了获得额外的安全性,我已经使用Apache +启用了ssl来支持JBoss。 Tomcat使用(端口8001上的AJP 1.3)与服务器通信。所以我的配置如下:
tomcat:443 (ssl) ---|--- Jboss:8080 (IpAddress:8080) (http)
此配置似乎适用于除flex部分之外的所有静态和动态页面。 当我尝试访问flex部分时,我的问题就开始了。 AMF通道失败,我可以在服务器日志中看到以下堆栈跟踪:
2012-04-13 16:19:50,940 ERROR [org.apache.catalina.core.ContainerBase。[jboss.web]。[localhost]。[/ catissuecore]。[MessageBrokerServlet]](ajp-127.0.0.1 -8009-4)servlet的Servlet.service()MessageBrokerServlet引发了异常 flex.messaging.security.SecurityException:必须通过安全协议联系安全端点'/ messagebroker / amfsecure'。 在flex.messaging.endpoints.AbstractEndpoint.validateRequestProtocol(AbstractEndpoint.java:862) 在flex.messaging.endpoints.AbstractEndpoint.service(AbstractEndpoint.java:630) 在flex.messaging.endpoints.AMFEndpoint.service(AMFEndpoint.java:99) 在flex.messaging.MessageBrokerServlet.service(MessageBrokerServlet.java:424) 在javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 在org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) 在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 在org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190) 在org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92) at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126) at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70) 在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 在org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158) 在org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330) 在org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:436) at org.apache.coyote.ajp.AjpProtocol $ AjpConnectionHandler.process(AjpProtocol.java:384) 在org.apache.tomcat.util.net.JIoEndpoint $ Worker.run(JIoEndpoint.java:447) 在java.lang.Thread.run(Thread.java:662)
我在remote-config.xml中定义了以下通道:
<default-channels>
<channel ref="my-amf"/>
<channel ref="my-secure-amf"/>
</default-channels>
我的services-config.xml有以下配置
<channels>
<channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
<endpoint uri="http://{server.name}:{server.port}/{context.root}/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"/>
<properties>
<polling-enabled>false</polling-enabled>
</properties>
</channel-definition>
<channel-definition id="my-secure-amf" class="mx.messaging.channels.SecureAMFChannel">
<endpoint uri="https://{server.name}:{server.port}/{context.root}/messagebroker/amfsecure" class="flex.messaging.endpoints.SecureAMFEndpoint"/>
<properties>
<!--HTTPS requests on some browsers do not work when pragma "no-cache" are set-->
<add-no-cache-headers>false</add-no-cache-headers>
</properties>
</channel-definition>
有人面对这个问题吗?
任何指针都非常有用。
答案 0 :(得分:1)
虽然解决方案在另一个答案中,但并不明显。如果SSL在负载均衡器或Apache中终止,您应该按如下方式切换secure-amf
通道定义类:
<channel-definition id="my-secure-amf" class="mx.messaging.channels.AMFChannel">
到
<channel-definition id="my-secure-amf" class="mx.messaging.channels.SecureAMFChannel">
来源:http://blogs.adobe.com/kmossman/2010/02/lcds_with_ssl_termination_with.html
答案 1 :(得分:0)
在我的情况下,我只允许HTTPS流量,并且允许所有这些HTTPS流量通过启用了ssl的Apache服务器进行路由。此外,我有一个负载均衡器,它与Apache发送HTTP请求而不是HTTPS请求,这是问题的根本原因。我更改了负载均衡器的设置,它运行正常。
例外:必须通过安全协议联系安全端点'/ messagebroker / amfsecure'。
有两种解决方案: