使用Spring Security需要通道和Amazon Elastic Load Balancer的登录循环

时间:2011-06-19 22:43:37

标签: spring amazon-ec2 spring-security

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

每当我访问此页面时,我都会进入登录循环。不知道怎么解决这个问题?不确定Spring Security是否存在问题,因为ELB是从端口8080的https端口443到我的应用程序的前向流量。

2 个答案:

答案 0 :(得分:3)

事实证明,Spring Security使用ServletRequest.getServerPort()来确定它是否使用安全端口。我的tomcat是使用8080和8443配置的,所以当ELB将请求从443转发到我的内部tomcat 8443时,webapp不接受这个作为安全端口:

20 Jun 18:16:49,184 ["http-bio-8443"-exec-5] DEBUG org.springframework.security. web.access.channel.RetryWithHttpsEntryPoint  - Redirecting to: /login.xhtml

我也试过使用代理端口,但无法使其工作。 此外,如果您将spring安全端口配置为使用8443,那么它不会正确地重定向(它会将应用程序重定向到外部不存在的8443)。

长话短说......以下设置有效: ELB向前80-> 80和443-> 443。 设置tomcat使用80和443。 设置端口映射以在Spring Security上使用80和443

答案 1 :(得分:2)

重定向循环几乎总是发生,因为您有一个不应该受到保护的安全URL。默认情况下,所有URL在spring security中都是安全的。

此外,如果JavaScript,CSS或图像资源被登录页面加载了单独的请求,那么它们的URL也会受到保护,这可能会导致循环。

启用调试日志,您应该了解重定向的原因。 This将帮助您调试日志记录(搜索页面以进行调试)。