我正在尝试使我的Spring Security在使用Amazon Elastic Load Balancer(ELB)的服务器上工作。 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>
每当我访问此页面时,我都会进入登录循环。知道如何解决这个问题吗?不确定Spring Security是否因ELB将流量从https端口443转发到我在8080端口上的应用程序而遇到问题。
最佳答案
事实证明,Spring Security使用ServletRequest.getServerPort()来确定它是否正在使用安全端口。我的tomcat是使用8080和8443配置的,因此当ELB将请求从443转发到我在8443上的内部tomcat时,webapp不接受此作为安全端口:
20 Jun 18:16:49,184 ["http-bio-8443"-exec-5] DEBUG org.springframework.security. web.access.channel.RetryWithHttpsEntryPoint - Redirecting to: /login.xhtml
我也尝试使用proxyport,但无法正常工作。
另外,如果您将spring安全端口配置为使用8443,则它不会正确进行重定向(它将应用程序重定向到8443,外部不存在该重定向)。
长话短说...以下设置有效:
ELB前进80-> 80和443-> 443。
将tomcat设置为使用80和443。
设置端口映射以在Spring Security上使用80和443
关于spring - Spring Security需求 channel 和Amazon Elastic Load Balancer的登录循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6405538/