Почему плагин acegi от grails не работает в weblogic?

У меня есть приложение grails (v1.2.1), использующее плагин acegi (v0.5.2) для аутентификации пользователей в домене Active Directory.

Все работает отлично, пока я запускаю приложение с помощью «grails run-app»; Правильный контроллер / действия защищены, пользователи могут успешно войти в систему, им не нужно входить в систему при каждом запросе страницы и т. Д.

Когда я запускаю приложение как войну внутри Weblogic 10.3, все выходит из строя. Правильный контроллер / действия требуют аутентификации, но после успешного входа в систему пользователь ВСЕГДА отправляется на defaultTargetUrl вместо первоначально запрошенного URL-адреса. После успешного входа в систему, если я попытаюсь вернуться на ту же защищенную страницу, которая только что заставила меня войти в систему, она попросит снова войти в систему (что бесполезно, потому что успешный вход по-прежнему отправляет меня на defaultTargetUrl). Если я намеренно ввожу неверного пользователя / пропускаю на странице входа в систему, меня отправляют обратно на страницу входа, как и было задумано, но сообщения проверки не появляются.

Я добавил журналы / отладил и определил следующее:

  • В цепочке фильтров есть экземпляры одних и тех же классов в одном и том же порядке, независимо от того, запускаю я из weblogic или автономно: [org.springframework.security.context.HttpSessionContextIntegrationFilter, org.codehaus.groovy.grails.plugins.springsecurity.FixRedirectLogoutFilter, org.code. groovy.grails.plugins.springsecurity.GrailsAuthenticationProcessingFilter, org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter, org.springframework.security.ui.rememberme. ui.ExceptionTranslationFilter]
  • При работе в автономном режиме (grails run-app) мой сеанс имеет атрибуты org.codehaus.groovy.grails.FLASH_SCOPE и SPRING_SECURITY_SAVED_REQUEST_KEY, сохраненные до того, как фильтр безопасности попытается аутентифицировать учетные данные пользователя. В weblogic на этом этапе у сеанса нет атрибутов. Я проверил, и все классы значений атрибутов сериализуемы.
  • При запуске в weblogic в начале запроса HttpSessionContextIntegrationFilter getSession (false) возвращает null.

person Bruce Goodwin    schedule 17.02.2010    source источник


Ответы (1)


РЕШЕНО.

Если вы когда-либо наблюдали подобное поведение, проверьте свои файлы cookie. В моем браузере было несколько файлов cookie JSESSIONID для localhost. Путь для двух из этих JSESSIONID совпадает с путем к моему приложению (один для пути "/" и один для пути к моему приложению.

Браузер отправлял оба совпадающих идентификатора JSESSIONID в заголовках HTTP. Первый JSESSIONID в заголовке был не только что установленным, поэтому мое приложение не считало запрос частью того же сеанса. Следовательно, потеря всех атрибутов сеанса. В частности, связанные с входом в систему.

person Bruce Goodwin    schedule 18.02.2010