我正在尝试使用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 回答
事实证明,Spring Security使用ServletRequest.getServerPort()来确定它是否使用安全端口 . 我的tomcat是使用8080和8443配置的,所以当ELB将请求从443转发到8443的内部tomcat时,webapp不接受这个作为安全端口:
我也试过使用代理端口,但无法让它工作 . 此外,如果您将spring安全端口配置为使用8443,那么它不会正确地重定向(它会将应用程序重定向到8443,而外部不存在) .
长话短说......以下设置有效:ELB前进80-> 80和443-> 443 . 设置tomcat使用80和443.安装端口映射在Spring Security上使用80和443
重定向循环几乎总是发生,因为您有一个不应该受到保护的安全URL . 默认情况下,所有URL都在spring security中受到保护 .
此外,如果JavaScript,CSS或图像资源由登录页面加载了单独的请求,则它们的URL也是安全的,这可能导致循环 .
启用调试日志,您应该了解重定向的原因 . This将帮助您调试日志记录(搜索页面以进行调试) .