在我的 Grails 应用程序 (2.3.11) 中,我的登录页面将 Ajax 请求发送到:
https://myurl/my-app/j_spring_security_check https://myurl/my-app/j_spring_security_check
但 spring-security 重定向到:
https://myurl:80/my-app/login/ajaxSuccess https://myurl:80/my-app/login/ajaxSuccess
这会导致超时错误(因为 URL 上添加了端口 80)。
仅当我的客户通过其流量管理器(Big-IP)访问应用程序时,才会出现此问题;如果他们直接通过服务器 IP 访问应用程序,则应用程序可以正常工作。
我可以在 Grails 中进行任何配置来解决这个问题吗?我不确定这个问题是否与应用程序或Big-IP有关。
这些是我与 spring-security 插件相关的配置(Config.groovy):
grails.plugins.springsecurity.successHandler.defaultTargetUrl = '/login/authSucccessExtJs'
grails.plugins.springsecurity.successHandler.alwaysUseDefault = true
grails.plugins.springsecurity.failureHandler.defaultFailureUrl = '/login/authFailExtJs?login_error=1'
grails.plugins.springsecurity.password.algorithm = 'MD5'
问题是您的应用程序正在接收 http 流量,因为您正在 BIG-IP 上卸载 ssl,因此它会将 http 链接返回到您的客户端。有一些潜在的解决方案。
- 配置 grails 将所有 URL 设置为 https,即使请求是 http
- 插入标题
X-Forwarded-Proto: https
(如果 grails 遵循这一点)通过本地流量策略或 iRule 在 BIG-IP 上(您可以通过在此处插入标头来从curl 测试这一点,看看是否有帮助)
- 通过流配置文件或 iRule 将 https 重写为 BIG-IP 上的 http URL,以响应流量。这对于 AJAX 来说可能会产生很大的问题,但在其他情况下也是可以的,但是,选项 1 或 2 会更高效且维护更少。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)