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

时间:2017-08-24 21:21:21

标签: grails spring-security big-ip

在我的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有关。

这些是我的配置(Config.groovy)与spring-security插件有关:

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'

1 个答案:

答案 0 :(得分:2)

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

  1. 配置grails以将所有URL设置为https,即使请求为http
  2. 通过本地流量策略或iRule在BIG-IP上插入标题import org.jeasy.rules.api.RulesEngine; import org.jeasy.rules.core.RulesEngineBuilder; public class Main { public static void main(String[] args) { RulesEngine rulesEngine = RulesEngineBuilder.aNewRulesEngine(); } } (如果grails尊重这一点)(你可以通过在那里插入标题来测试这个,看看是否有帮助)
  3. 通过流配置文件或iRule将响应流量中的https重写为BIG-IP上的http URL。对于AJAX来说这可能是非常有问题的,但是否则会有效,但是,选项1或2会更有效,维护更少。