DD.*_*DD. 6 spring spring-security amazon-ec2
我正在尝试使用Amazon Elastic Load Balancer(ELB)在服务器上运行Spring安全性.ELB在端口80上配置为在端口8080和端口443上转发到我的应用程序以转发到8080.
<security:intercept-url pattern="/login.xhtml" access="IS_AUTHENTICATED_ANONYMOUSLY" requires-channel="https" />
<security:port-mappings>
<security:port-mapping http="80" https="443" />
</security:port-mappings>
Run Code Online (Sandbox Code Playgroud)
每当我访问此页面时,我都会进入登录循环.不知道怎么解决这个问题?不确定Spring Security是否存在问题,因为ELB是从端口8080的https端口443到我的应用程序的前向流量.
事实证明,Spring Security 使用 ServletRequest.getServerPort() 来确定是否使用安全端口。我的 tomcat 配置为使用 8080 和 8443,因此当 ELB 将请求从 443 转发到 8443 上的内部 tomcat 时,web 应用程序不接受此端口作为安全端口:
20 Jun 18:16:49,184 ["http-bio-8443"-exec-5] DEBUG org.springframework.security. web.access.channel.RetryWithHttpsEntryPoint - Redirecting to: /login.xhtml
Run Code Online (Sandbox Code Playgroud)
我也尝试使用代理端口,但无法让它工作。此外,如果您将 Spring Security 端口配置为使用 8443,那么它不会正确执行重定向(它将把应用程序重定向到外部不存在的 8443)。
长话短说......以下设置有效:ELB 转发 80->80 和 443->443。设置 tomcat 使用 80 和 443。在 Spring Security 上设置端口映射以使用 80 和 443
| 归档时间: |
|
| 查看次数: |
2909 次 |
| 最近记录: |