2012-01-25 3 views
2

내 웹 앱에 여러 인증 관리자가 있습니다 (하나는 WEB 액세스 용 API). 내가이 아이 콩 CONFIGS에 의해 덮어 쓸 수 원하기 때문에스프링 보안 - 여러 인증 공급자

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

내가 인증 제공자를 인라인 할 수 없습니다 아래와 같이 봄 보안 태그를 통해 구성 - API는 기본 인증 서비스는 있어야합니다.

내 문제는 security : authentication-provider 요소에서 별칭/ID를 정의하여 인증 관리자에서 참조 할 수 없다는 것입니다. 이 간단한 해결 방법이 있습니까?

솔루션 :

내가 마지막으로 일반 콩 설정 :

<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 네임 스페이스 XML 구성에 대한 깔끔한 방법 일뿐입니다. 일반 <bean> 구성으로 정확히 동일한 솔루션을 얻을 수 있습니다. 그렇게하면 평상시처럼 ID를 사용할 수 있습니다. This blog post이 도움이 될 수 있습니다.

0

네임 스페이스에서 이름은 @Service("userDetailsService")의 이름을 사용하여 java에 추가 할 수 있습니다.

빈을 정의하고 체인에 추가 할 수도 있습니다.

<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은 네임 스페이스에 등록 된 bean의 이름입니다.

기본 인증 전에 실행됩니다.

관련 문제