Spring Security - несколько провайдеров аутентификации - PullRequest
3 голосов
/ 25 января 2012

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

    <?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>
...

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

Моя проблема в том, что я не могу определить псевдоним / идентификатор для элемента security: authentication-provider, чтобы ссылаться на него в менеджере аутентификации. Есть ли простой способ обойти это?

Решение:

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

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

Ответы [ 2 ]

4 голосов
/ 25 января 2012

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

0 голосов
/ 25 января 2012

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

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

<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 - это имя компонента, зарегистрированного в пространстве имен.

Это будет выполнено до базовой аутентификации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...