首页 文章

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

提问于
浏览
6

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

  • 3

    事实证明,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
    

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

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

  • 2

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

    此外,如果JavaScript,CSS或图像资源由登录页面加载了单独的请求,则它们的URL也是安全的,这可能导致循环 .

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

相关问题