2013-08-04 3 views
0

하나의 웹 응용 프로그램에 UserDetailsService 구현이 있어야 할 수 있습니까? 좀 더 정확히 말하자면, 내 요구 사항은 한 가지 유형의 사용자 (UserType 1을 말함)에 대해 인증해야하는 http POST 요청을 수신하는 Servlet이고, HTTP POST 요청에는 인증 사용자에게 사용할 수있는 일부 필드가 포함되어 있습니다 (사용자 ID 및 일부 해시 문자열). 인증이 성공하면 사용자는 또 다른 로그인 페이지로 다시 전달되어 사용자 유형이 UserType 2 인 사용자 유형이 다시 입력됩니다. 여기에서두 개의 개별 UserDetailsService 구현

UserType 1과 UserType 2에는 두 개의 개별 프린시 펄과 신임이 있습니다. UserType 2 (즉, 세션 2)의 세션으로 이동하기 위해 HTTP 요청 요청 매개 변수를 필요로합니다.

세션 1은 세션 1이 파괴 될 때까지 살아남습니다.

나는 또한 두 개의 인증 엔트리 포인트가 있어야한다고 생각하니?

내 직감은 이것이 불가능하다는 것입니다 (나는 틀렸 더라면 좋겠다)!

이에 대한 설명이나 아이디어가 있습니까?

답변

3

스프링 보안으로 중첩 인증을 구현하는 방법을 잘 모르겠습니다. 하지만 두 개의 별도의 UserDetailsService 구현을 가질 수 있습니다. 두 가지 유형의 URL이 /**/admin/** 인 경우를 생각해보십시오. 두 가지 유형의 사용자 그룹이이 URL을 사용할 수 있습니다.

<http pattern="/admin/**" authentication-manager-ref="adminAuthenticationManager"> 
    <intercept-url pattern="/**" access="ROLE_ADMIN" /> 
    ... 
</http> 

<authentication-manager id="adminAuthenticationManager" > 
    <authentication-provider user-service-ref="adminUserDetailsService"/> 
</authentication-manager> 

<bean id="adminUserDetailsService" class="com.mucompany.security.AdminUserDetailsService"/> 

<!-- No pattern, so everything will be matched --> 
<http authentication-manager-ref="adminAuthenticationManager"> 
    <intercept-url pattern="/**" access="ROLE_USER" /> 
    ... 
</http> 

<authentication-manager id="userAuthenticationManager" > 
    <authentication-provider user-service-ref="publicUserDetailsService"/> 
</authentication-manager> 

<bean id="publicUserDetailsService" class="com.mucompany.security.PublicUserDetailsService"/> 

심지어 entry-point-ref 속성을 사용하여 각 HTTP 태그에 대해 서로 다른 진입 점을 선언 할 수 있습니다 : 여러 HTTP를 태그 (see corresponding documentation)를 사용할 수 있습니다 스프링 시큐리티 3.1에서 시작.

관련 문제