Почему плагин Gragi 'acegi не работает в weblogic? - PullRequest
0 голосов
/ 17 февраля 2010

У меня есть приложение 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.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 run-app) мой сеанс имеет атрибуты org.codehaus.groovy.grails.FLASH_SCOPE и SPRING_SECURITY_SAVED_REQUEST_KEY, сохраненные до того, как фильтр безопасности попытается аутентифицировать учетные данные пользователя. В weblogic сеанс не имеет атрибутов на данный момент. Я проверил, и классы значений атрибута все сериализуемы.
  • При запуске в weblogic в начале запроса HttpSessionContextIntegrationFilter request.getSession (false) возвращает ноль.

1 Ответ

1 голос
/ 18 февраля 2010

решаемая.

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

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

...