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