我正在尝试使我的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/

10-10 02:41