2017-08-24 56 views
0

在我的Grails應用程序(2.3.11),我的登錄頁面發送Ajax請求:Grails的春季安全重定向到錯誤的端口

https://myurl/my-app/j_spring_security_check

但彈簧安全重定向到:

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

這會導致超時錯誤(因爲端口80已添加到URL上)。 只有當我的客戶端通過其流量管理器(Big-IP)訪問應用程序時,纔會出現此問題。如果他們直接通過服務器IP訪問應用程序,則它可以正常工作。

在Grails中有什麼配置可以解決這個問題嗎?我不確定這個問題是否與應用程序或Big-IP有關。

這些是我的CONFIGS(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' 

回答

2

的問題是你的應用程序接收HTTP流量,因爲你是在BIG-IP卸載SSL,那麼它將返回http鏈接到您的客戶端。有幾個潛在的解決方案。

  1. 配置Grails的所有URL設置爲HTTPS,即使請求是HTTP
  2. 插入頭部X-Forwarded-Proto: https(如Grails的榮譽本)通過本地流量策略或的iRule在BIG-IP(可以測試這從curl通過插入標頭看看是否有幫助)
  3. 重寫HTTPS協議http URL到BIG-IP響應通過流配置文件或iRule的流量。這對於AJAX來說可能很成問題,但是否則會起作用,但是選項1或2的效率會更高,維護也更少。