2011-04-13 6 views
1

응용 프로그램과 함께 로그인에 사용자 정의 인증 관리자를 사용합니다. Users라는 테이블을 검색하면됩니다.다른 URL에서 오는 다른 로그인

<sec:authentication-manager alias="authenticationManager"> 
    <sec:authentication-provider user-service-ref="userDAOImpl"> 
     <sec:password-encoder hash="sha" /> 
    </sec:authentication-provider> 
</sec:authentication-manager> 

문제는 이제 "ExternalUsers"테이블에서 검색해야하는 다른 로그인을해야한다는 것입니다.

응용 프로그램은 이런 방식으로 작동합니다 :

  1. 를 요청/외부와 같은 URL에서 온다면/** 나는 테이블 "ExternalUsers"를 검색하는 A authenticationManager2을 통해 이동해야합니다. 이 사용자는/external/** urls에만 액세스 할 수 있습니다.
  2. 요청이 다른 사용자의 요청입니다. 사용자 인 authenticationManager1 (지금 당장 가지고있는 사용자)을 통해 이동해야합니다. 이러한 사용자는 동일한 사용자 이름와 테이블 사용자 및 ExternalUsers 에/**

가있을 수 있습니다 사용자가 외부의 모든 URL하지만 패턴과 일치하는 사람을/액세스 할 수 있습니다. 이것이 URL의 출처에 따라 다른 로그인을 설정해야하는 이유입니다. 두 로그인은 동일한 응용 프로그램에 있어야합니다.

Spring에서는 요청 URL에 따라 서로 다른 두 개의 authenticationManager를 구성 할 수 있습니까?

감사합니다.

답변

1

나는 봄이 상자에서 그것을 제공한다고 생각하지 않습니다. 하지만 사용자는 자신의 인증 공급자 (AuthenticationProvider 인터페이스 구현)를 구현할 수 있습니다.이 공급자는 일부 논리에 따라 하나의 두 개의 표준 스프링 인증 공급자에 인증을 위임합니다.

+0

그러나 어떻게 authenticationManager를 구현하면 요청 URL을 알 수 있습니까? – Javi

+0

@ Javi : 내 잘못 : 인증 공급자가 관리자가 아닙니다. – Ralph

1

스프링 보안의 차기 버전은 다중 인증 관리자를 허용 할 수 있지만 그때까지는 일부 사용자 정의가 작업을 수행합니다.

나는 랄프의 대답이 올바른 방향이라고 생각한다. 다른 http 요소 (Spring Security 3.1)를 추가하여 외부/** url 패턴을 캡처하고 사용자 정의 로그인 필터를 추가하여 다른 토큰 (AbstractAuthenticationToken을 확장하는 ExternalUserPasswordAuthenticationToken이라는 이름을 사용할 수 있음)을 인증 공급자에게 전달할 수 있습니다. 자신의 토큰과 제공자를 개발하려면 Configuring Spring Security 3.x to have multiple entry pointsAuthenticate user using external webservice in grails에 대한 내 대답을 참조하십시오.

다른 방법으로 인증 작업을 수행하는/external/** url 패턴에 대한 유권자를 설정하는 것이 좋습니다.

관련 문제