2013-08-04 2 views
0

Возможно ли иметь реализацию UserDetailsService в одном веб-приложении? Чтобы быть более точным, моим требованием является наличие сервлета, который слушает HTTP-запросы POST, которые должны быть аутентифицированы против одного типа пользователей (скажем, UserType 1), запрос Http POST содержит некоторые поля, которые я мог бы использовать для аутентификации пользователя (идентификатор пользователя и некоторые строки хэша). После успешной аутентификации пользователь снова перенаправляется на другую страницу входа в систему, где снова выполняется аутентификация пользователя. Пользовательский тип - это UserType 2. ЗдесьДва отдельных UserDetailsService Реализации

Пользовательский тип 1 и UserType 2 имеют два отдельных принципала и учетные данные. Мне нужно указать параметры запроса Http POST для сеанса UserType 2 (I.e. session 2).

сессия 2 должна сохраниться до тех пор, пока не будет уничтожена сессия 1.

Я также предполагаю, что мне нужно иметь две точки входа для аутентификации?

Чувство меня, что это невозможно (я бы хотел, чтобы я был неправ)!

Любые разъяснения или идеи относительно этого?

ответ

3

Я не уверен, как вложенная аутентификация может быть реализована с помощью Spring Security. Но вы можете иметь две отдельные версии UserDetailsService. Рассмотрим случай, когда у вас есть два типа URL-адресов /** и /admin/**, и они могут использоваться двумя отдельными группами пользователей. Начиная с Spring Security 3.1 вы можете использовать несколько HTTP тегов (see corresponding documentation):

<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"/> 

Вы можете даже объявить различные точки входа для каждого HTTP тега с помощью entry-point-ref атрибута.