2014-11-19 2 views
1

나는 스프링 보안을 사용하여 웹 애플리케이션에 로그인하는 사용자를 인증합니다. 인증은 현재 LDAP로 수행됩니다.스프링 보안 LDAP 연결 관리

내 webapp와 내 LDAP 서버 사이에 방화벽이 있습니다. 50 분 동안 사용하지 않으면 방화벽은 유휴 LDAP 연결을 플러시합니다.

스프링 보안은 기존 연결을 재사용 할 수 있지만 항상 그런 것은 아닙니다. 내 방화벽으로 연결이 끊어지면 로그인이 실패합니다.

내 Tomcat 로그에서 예외는 다음과 같습니다.

org.springframework.ldap.ServiceUnavailableException: ldap:389; socket closed; nested exception is javax.naming.ServiceUnavailableException 

더 구체적으로 문제를 일으키는 연결은 검색 요청에 사용되는 연결입니다. 프레임 워크에 의해 체계적으로 닫히지 않았습니다. 바인딩 요청은 요청이 끝날 때 닫힌 새 연결에서 항상 수행됩니다.

내 앱에서는 특정 역할을 가진 사용자에게만 액세스 권한을 부여하는 맞춤 LdapAuthoritiesPopulator 때문에 검색 요청이 바인딩 이후에 발행됩니다. 기본 LdapAuthoritiesPopulator가 같은 방식으로 검색 요청을 발행했는지 확인했습니다.

검색 요청 연결이 거의 무기한으로 열려 있어도 정상입니까? 그렇다면 스프링 보안이 연결을 관리하는 방법을 바꿀 수있는 방법이 있습니까?

사용자 정의 LdapAuthoritiesPopulator를 사용하여 인증 중에 역할 제약 조건을 적용하는 것보다 더 좋은 방법이 있는지 알고 싶습니다.

  • (최대 3.1.2에서) 봄 보안 3.1.7
  • 스프링 LDAP 코어 (최대 1.3.0에서) 2.0.2
  • :

    내 문제는 쉽게 업그레이드를 시도한 후 계속

  • spring-ldap 1.3.1 (최대 1.3.0)

감사합니다.

+0

현재 어떤 버전을 사용하십니까? – holmis83

+0

3.1.2를 사용 중입니다. –

답변

0

해결책은 ldap-spring pooling과 유효성 검사를 사용하는 것입니다. http://docs.spring.io/spring-ldap/docs/1.3.x/reference/html/pooling.html

먼저 좋은 단계는 <beans:property name="pooled" value="false"/>을 정의하는 것입니다. 이를 통해 모든 요청 (바인딩 또는 검색)은 독립적 인 연결로 이루어집니다.

처리 할 ldap 연결이 많고 연결 오버 헤드를 최소화하려면 추가 개체를 설정하여 연결 풀 동작을 정의해야합니다. 그것은 모두 문서에서 잘 설명되어 있습니다.

spring-ldap 1.3부터 ​​프로젝트에 commons-pool 1.6을 추가해야합니다.

관련 문제