2010-02-17 60 views
0

我有一個使用acegi插件(v0.5.2)的grails(v1.2.1)應用程序,以針對Active Directory域對用戶進行身份驗證。爲什麼grails的acegi插件不能在weblogic中工作?

只要我使用「grails run-app」運行應用程序,一切都可以正常工作;正確的控制器/操作受到保護,用戶可以成功登錄,他們不必登錄每個頁面請求等。

當我將應用程序作爲Weblogic 10.3內部的戰爭運行時,整個事件中斷下。正確的控制器/操作需要身份驗證,但成功登錄後,用戶始終會發送到defaultTargetUrl,而不是其最初請求的URL。成功登錄後,如果我嘗試返回剛剛導致我登錄的受保護頁面,它會再次請求登錄(因爲成功登錄仍然會將我發送到defaultTargetUrl,所以這無助於用戶)。如果我故意在登錄頁面上輸入了錯誤的用戶/密碼,我會按照設計將其發送回登錄頁面,但驗證消息不會顯示。

我已經添加了一些記錄/做了一些調試和確定以下內容:

  • 濾波器鏈具有以相同的順序相同的類的實例我是否從weblogic的或獨立運行: [有機springframework.security.context.HttpSessionContextIntegrationFilter, org.codehaus.groovy.grails.plugins.springsecurity.FixRedirectLogoutFilter, org.codehaus.groovy.grails.plugins.springsecurity.GrailsAuthenticationProcessingFilter, org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter, org.springframework.security。 ui.rememberme.RememberMeProcessingFilter, org.springframework.security.providers.anonymous.AnonymousProcessingFilter, org.springframework.security.ui.ExceptionTranslationFilter]
  • 運行在獨立(Grails的運行的應用程序),我會擁有org.codehaus.groovy .grails.FLASH_SCOPE和SPRING_SECURITY_SAVED_REQUEST_KEY屬性在安全篩選器嘗試驗證用戶的憑證之前保存。在weblogic中,會話在那個時候沒有任何屬性。我已經檢查過,屬性值類都是可序列化的。
  • 在weblogic中運行時,在HttpSessionContextIntegrationFilter的開始處request.getSession(false)返回null。

回答

1

已解決。

如果您看到過類似的行爲,請檢查您的Cookie。我的瀏覽器有幾個本地主機的「JSESSIONID」cookie。這兩個JSESSIONID的路徑與我的應用程序的路徑相匹配(一個用於路徑「/」,另一個用於我的應用程序的路徑)

瀏覽器在HTTP標頭中發送兩個匹配的JSESSIONID。頭文件不是剛剛設置的頭文件,所以我的應用程序並不認爲這個請求是同一個會話的一部分,因此會丟失所有會話屬性,特別是與登錄相關的屬性。

相關問題