Grails spring 安全重定向到错误的端口

Grails spring security redirects to wrong port

在我的 Grails 应用程序 (2.3.11) 中,我的登录页面将 Ajax 请求发送到:

https://myurl/my-app/j_spring_security_check

但是 spring-security 重定向到:

https://myurl:80/my-app/login/ajaxSuccess

这会导致超时错误(因为 URL 上添加了端口 80)。 只有当我的客户端通过他们的流量管理器(Big-IP)访问应用程序时才会出现此问题;如果他们直接通过服务器 IP 访问应用程序,则它可以正常工作。

我可以在 Grails 中做任何配置来解决这个问题吗?我不确定这个问题是与应用程序有关还是与Big-IP有关。

这些是我与 spring-安全插件相关的配置(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,所以它 returns http 链接到您的客户端。有一些潜在的解决方案。

  1. 配置 grails 以将所有 URL 设置为 https,即使请求是 http
  2. 通过本地流量策略或 iRule(您可以通过插入 header 在那里看看是否有帮助)
  3. 在 BIG-IP 上将 https 重写为 http URL,以通过流配置文件或 iRule 响应流量。这对 AJAX 来说可能是个大问题,但除此之外还是可行的,但是,选项 1 或 2 会更有效且维护更少。