복붙노트

[SPRING] 스프링 보안 - 다중 인증 제공자

SPRING

스프링 보안 - 다중 인증 제공자

내 웹 앱에 여러 인증 관리자가 있습니다 (하나는 WEB 액세스 용 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 요소에서 별칭 / ID를 정의하여 인증 관리자에서이를 참조 할 수 없다는 점입니다. 이 간단한 해결 방법이 있습니까?

해결책:

나는 마침내 빈 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>

해결법

  1. ==============================

    1.이 스프링 시큐리티 XML 네임 스페이스는 단지 XML을 체계적으로 정리하는 방법 일 뿐이다. 일반 설정으로 정확히 같은 해결책을 얻을 수 있습니다. 그렇게하면 평소와 같이 ID를 사용할 수 있습니다. 이 블로그 게시물은 도움이 될 것입니다.

    이 스프링 시큐리티 XML 네임 스페이스는 단지 XML을 체계적으로 정리하는 방법 일 뿐이다. 일반 설정으로 정확히 같은 해결책을 얻을 수 있습니다. 그렇게하면 평소와 같이 ID를 사용할 수 있습니다. 이 블로그 게시물은 도움이 될 것입니다.

  2. ==============================

    2.네임 스페이스에서 이름은 @Service ( "userDetailsService")와 함께 java에 이름을 추가 할 수 있습니다.

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

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

  3. from https://stackoverflow.com/questions/8999985/spring-security-multiple-authentication-providers by cc-by-sa and MIT license