2

在我的 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-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'
4

1 回答 1

3

问题是您的应用程序正在接收 http 流量,因为您正在 BIG-IP 上卸载 ssl,因此它会将 http 链接返回给您的客户端。有一些潜在的解决方案。

  1. 配置 grails 以将所有 URL 设置为 https,即使请求是 http
  2. 通过本地流量策略或 iRule 在 BIG-IP 中插入标头X-Forwarded-Proto: https(如果 grails 支持这一点)(您可以通过在 curl 中插入标头来测试是否有帮助)
  3. 通过流配置文件或 iRule 将 BIG-IP 上的 https 重写为 http URL 以响应流量。这对于 AJAX 来说可能是非常有问题的,但否则会起作用,但是,选项 1 或 2 会更有效且维护更少。
于 2017-08-28T13:53:55.223 回答