java - 如何让 Spring Security 在跨多个域的负载均衡器后面工作?

标签 java spring amazon-web-services tomcat proxy

我们正在将一个旧的 java/spring 应用程序移到 AWS 中,因此它位于 AWS 应用程序负载均衡器的后面。 Tomcat 直接在 8080 端口上的负载均衡器后面运行,我们在负载均衡器和 tomcat 之间使用 HTTP。

问题是在这种情况下,spring 安全模块无法识别连接是安全的。

我可以通过配置连接来解决这个问题:

<Connector port="8080"
           protocol="HTTP/1.1"
           connectionTimeout="20000"
           proxyName="single-host.example.com"
           secure="true"
           scheme="https"
           redirectPort="443"
           proxyPort="443" />

这适用于单个主机名。但是,我需要它来跨多个主机名工作。

我已尝试跳过代理并添加:

server.tomcat.remote_ip_header=X-Forwarded-For
server.tomcat.protocol_header=X-Forwarded-Proto

但这似乎没有任何区别。

有没有办法在这种情况下支持多个主机名?

最佳答案

AWS LoadBalancer 发送 X-Forwarded-Proto代理请求时的 header 。

在 Tomcat 上配置 RemoteIpValve拥有request.secure以及从这些 header 解释的其他请求变量。

<Valve className="org.apache.catalina.valves.RemoteIpValve"/>

您还应该在 Connector 配置中省略设置 proxyName,因为它应该自动来自 Valve。

关于java - 如何让 Spring Security 在跨多个域的负载均衡器后面工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45166572/

相关文章:

java - 带有特殊字符的 FTP URL 用户名和密码

java - 如果抛出 JUnit ExpectedException 后如何继续测试?

java - 嵌套异常是 java.lang.NoClassDefFoundError : org/slf4j/impl/StaticLoggerBinder

amazon-web-services - 自动缩放组应用程序负载均衡器运行状况检查

amazon-web-services - AWS S3 CLI : Anonymous users cannot initiate multipart uploads

java - 具有并发慢速TCP客户端连接的tomcat Java NIO

java - Grails 中 pdf 生成中的 NoClassDefFoundError 异常

java - 如何解决错误 "Error applying BeanValidation relational constraints"

java - RequestMappingHandlerMapping 没有映射到这里有什么原因吗?

amazon-web-services - 如何从aws上的无服务器框架输出资源路径?