2010-02-17 5 views
0

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

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

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

Я добавил некоторые протоколирования/сделать некоторые отладки и определяется следующим образом:

  • Цепь фильтра имеет экземпляры одного и того же класса в том же порядке, работают ли я от 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. В моем браузере было несколько cookie «JSESSIONID» для localhost. Путь для 2 из этих JSESSIONID соответствовал пути моего приложения (один для пути «/» и один для пути моего приложения.

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

Смежные вопросы