2012-01-25 2 views
2

У моего веб-приложения есть несколько диспетчеров аутентификации (один для API для WEB-доступа). Апи должен иметь только базовый сервис аутентификации - конфигурируется с помощью разметки пружины безопасности, как показано ниже:Spring Security - несколько провайдеров аутентификации

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:security="http://www.springframework.org/schema/security" 
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
    http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd"> 

    <security:authentication-manager alias="apiAuthenticationManager"> 
     <security:authentication-provider ref="apiAuthenticationProvider" /> 
    </security:authentication-manager> 

    <security:authentication-provider > 
     <security:user-service> 
      <security:user name="apiadmin" password="password" authorities="ROLE_API_ADMIN" /> 
      <security:user name="apiuser" password="otherpassword" authorities="ROLE_API_USER" /> 
     </security:user-service> 
    </security:authentication-provider> 
... 

я не могу, вставлю аутентификацию-провайдер, так как я хочу быть переписываемым на ребенке боб конфиги.

Моя проблема заключается в том, что я не могу определить псевдоним/id элемента security-provider для обеспечения безопасности, чтобы ссылаться на него в диспетчере проверки подлинности. Есть ли простой способ обхода?

Решение:

я наконец-то понял, как это сделать с помощью пространства имен-путь без погружения в обычной фасоли конфигурации :)

<security:user-service id="apiUserDetailsService"> 
    <security:user name="apiadmin" password="password" authorities="ROLE_API_ADMIN" /> 
    <security:user name="apiuser" password="otherpassword" authorities="ROLE_API_USER" /> 
    </security:user-service> 

<security:authentication-manager alias="apiAuthenticationManager"> 
    <security:authentication-provider user-service-ref="apiUserDetailsService"/> 
</security:authentication-manager> 

ответ

4

Пожалуйста, имейте в виду, что это пространство имен XML Spring Security это просто аккуратный способ организации вашего XML. Вы можете получить точно такое же решение с простым <bean> config. Таким образом, вы сможете использовать идентификатор, как обычно. This blog post может быть вам полезна.

0

В пространстве имен имя может быть добавлено в java с @Service("userDetailsService") с именем.

Вы также можете определить beans и добавить их в цепочку.

<bean id="myFilter" class="a.b.c.myFilter"> 
    <security:custom-filter before="BASIC_PROCESSING_FILTER" /> 
    <property name="authenticationManager" ref="_authenticationManager" /> 
</bean> 
<bean id="myProvider" class="a.b.c.myProvider"> 
    <security:custom-authentication-provider /> 
    <property name="userDetailsService" ref="userDetailsService" /> 
</bean> 

<security:http> 
    [...] 
</security:http> 

_authenticationManager это имя компонента, который зарегистрирован в пространстве имен.

Это будет выполнено до базового auth.

Смежные вопросы