2010-02-17 59 views
0

我有一个使用acegi插件(v0.5.2)的grails(v1.2.1)应用程序,以针对Active Directory域对用户进行身份验证。为什么grails的acegi插件不能在weblogic中工作?

只要我使用“grails run-app”运行应用程序,一切都可以正常工作;正确的控制器/操作受到保护,用户可以成功登录,他们不必登录每个页面请求等。

当我将应用程序作为Weblogic 10.3内部的战争运行时,整个事件中断下。正确的控制器/操作需要身份验证,但成功登录后,用户始终会发送到defaultTargetUrl,而不是其最初请求的URL。成功登录后,如果我尝试返回刚刚导致我登录的受保护页面,它会再次请求登录(因为成功登录仍然会将我发送到defaultTargetUrl,所以这无助于用户)。如果我故意在登录页面上输入了错误的用户/密码,我会按照设计将其发送回登录页面,但验证消息不会显示。

我已经添加了一些记录/做了一些调试和确定以下内容:

  • 滤波器链具有以相同的顺序相同的类的实例我是否从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。我的浏览器有几个本地主机的“JSESSIONID”cookie。这两个JSESSIONID的路径与我的应用程序的路径相匹配(一个用于路径“/”,另一个用于我的应用程序的路径)

浏览器在HTTP标头中发送两个匹配的JSESSIONID。头文件不是刚刚设置的头文件,所以我的应用程序并不认为这个请求是同一个会话的一部分,因此会丢失所有会话属性,特别是与登录相关的属性。

相关问题