2010-02-17 3 views
0

나는 Active Directory 도메인에 대해 사용자를 인증하기 위해 acegi plugin (v0.5.2)을 사용하는 grails (v1.2.1) 응용 프로그램을 가지고 있습니다.Grails의 acegi 플러그인이 weblogic에서 작동하지 않는 이유는 무엇입니까?

"grails run-app"를 사용하여 앱을 실행하는 한 모든 것이 완벽하게 작동합니다. 올바른 컨트롤러/액션이 보호되고 사용자가 성공적으로 로그인 할 수 있으며 각 페이지 요청시 로그인 할 필요가 없습니다.

Weblogic 10.3 내부에서 전쟁으로 앱을 실행하면 모든 것이 손상됩니다 하위. 올바른 컨트롤러/작업에는 인증이 필요하지만 로그인 성공 후 사용자는 원래 요청한 URL 대신 defaultTargetUrl로 항상 전송됩니다. 로그인에 성공한 후 방금 로그인 한 것과 동일한 보호 페이지로 돌아 가려는 경우 다시 로그인하라는 메시지가 표시됩니다 (이는 성공적인 로그인이 나를 defaultTargetUrl로 보내므로 도움이되지 않습니다). 로그인 페이지에 의도적으로 불량 사용자를 입력하거나 패스하면 로그인 페이지로 다시 보내지 만 확인 메시지는 나타나지 않습니다.

I 일부 로그/수행 디버깅을 첨가하고, 다음 결정했습니다 [조직 :

  • 필터 체인은 I는 로직 또는 독립형에서 실행할지 여부를 동일한 순서로 동일한 클래스의 인스턴스를 가진다. 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에서 실행 중일 때 HttpSessionContextIntegrationFilter의 시작 부분에서 request.getSession (false)는 null을 반환합니다.

답변

1

솔브.

이와 같은 행동을하는 경우 쿠키를 확인하십시오. 내 브라우저에는 localhost에 대해 여러 개의 "JSESSIONID"쿠키가 있습니다. 이 JSESSIONID 중 2 개의 경로가 내 앱의 경로와 일치합니다 (하나는 경로 "/", 다른 하나는 내 앱 경로)

브라우저가 HTTP 헤더에서 일치하는 JSESSIONID를 모두 전송했습니다. 헤더는 방금 설정 한 것이 아니기 때문에 요청이 동일한 세션의 일부라고 생각하지 않았습니다. 따라서 모든 세션 속성이 손실되었습니다. 특히 로그인과 관련된 것입니다.

관련 문제