У меня есть приложение 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.