복붙노트

[SPRING] 여러 로그인 양식, 다양한 인증 관리자 - 최신 스프링 보안

SPRING

여러 로그인 양식, 다양한 인증 관리자 - 최신 스프링 보안

두 개의 별도 로그인 폼이 필요한 스프링 보안으로 보안 된 웹 애플리케이션이 있습니다. 이 두 로그인 양식은 완전히 독립적이어야합니다. 나는 다른 로그인 폼, 다른 URL 경로, 각각 다른 인증 관리자를 가질 수 있음을 의미합니다.

나는 구글 곳곳을 둘러 보았고 이것을 수행 할 수있는 몇 가지 방법이 있지만 최근 몇 주 동안 코드의 최신 스냅 샷 버전에서이 작업을 쉽게 수행 할 수 있도록 몇 가지 변경 사항을 읽고 읽었습니다.

우선,이 버그가 완료되면서 SEC-1171은 다중 필터 체인 구성을 지원하기 위해 여러 네임 스페이스 요소를 가질 수 있습니다.

둘째,이 다른 버그가 SEC-1847을 보여 주므로 이제 각 http 태그에 대한 사용자 정의 인증 관리자를 선택할 수 있습니다.

문제는 내가 다운로드하여 컴파일하고 모든 것이 xsd를 사용하여 각 http 태그에 대한 사용자 정의 인증 관리자를 만들 수 없다는 것입니다. 로그인 처리 URL을 변경하려고 시도 할 때마다 오류가 발생합니다. 각 로그인 양식의 열쇠를 기억하십시오.

나는 이런 식으로 일을 시작했다.

<!-- Configure realm for administration users -->
<http pattern="/admin/**" auto-config="true" disable-url-rewriting="true" >
    <intercept-url pattern="/admin/**" access="ROLE_ADMIN" />
    <form-login login-page="/adminLogin.htm" default-target-url="/" 
                login-processing-url="/loginProcessing" 
                authentication-failure-url="/adminLogin.htm?error" />
    <logout invalidate-session="true" logout-success-url="/" logout-url="/logout" />
<remember-me key="******" user-service-ref="userDetailsService" />
</http>

<!-- Configure realm for standard users -->
<http auto-config="true" disable-url-rewriting="true">
    <intercept-url pattern="/user/**" access="ROLE_USER" />
    <form-login login-page="/login.htm" default-target-url="/" 
                login-processing-url="/loginProcessing" 
                authentication-failure-url="/login.htm?error" />
    <logout invalidate-session="true" logout-success-url="/" logout-url="/logout" />
<remember-me key="******" user-service-ref="userDetailsService" />
</http>

<authentication-manager alias="authenticationManager">
<authentication-provider user-service-ref="userDetailsService"  >
    <password-encoder ref="passwordEncoder"/>
</authentication-provider>

<authentication-provider>
    <password-encoder ref="passwordEncoder"/>
    <user-service>
                <user name="ned" password="****" authorities="ROLE_USER" />
            <user name="tom" password="****" authorities="ROLE_ADMIN"/>
    </user-service>
</authentication-provider>
</authentication-manager>

Spring Security 3.1의 최신 스냅 샷을 사용하고 있습니다.

내가 말했듯이 이상은 최근에이 버그들에 대해 바뀐 "새로운"방법을 사용하여 완전히 독립적 인 두 가지 로그인 폼을 가질 수 있다는 것입니다.

누구도 이걸 가지고 일했거나 어떤 생각을 가지고 있니?

미리 감사드립니다.

해결법

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

    1.SEC-1847에 대한 10 월 30 일의 커밋 로그 (2f67bb3)에서 볼 수 있듯이 authentication-manager-ref 속성은 http 및 global-method-security에 추가 될 수 있습니다.

    SEC-1847에 대한 10 월 30 일의 커밋 로그 (2f67bb3)에서 볼 수 있듯이 authentication-manager-ref 속성은 http 및 global-method-security에 추가 될 수 있습니다.

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

    2.Ritesh, http 요소에서 authentication-manager-ref를 설정하려고하면 다음 예외가 발생합니다 : org.xml.sax.SAXParseException : cvc-complex-type.3.2.2 : Attribute 'authentication- manager-ref '는'security : http '요소에 표시 할 수 없습니다.

    Ritesh, http 요소에서 authentication-manager-ref를 설정하려고하면 다음 예외가 발생합니다 : org.xml.sax.SAXParseException : cvc-complex-type.3.2.2 : Attribute 'authentication- manager-ref '는'security : http '요소에 표시 할 수 없습니다.

    내 security.xml 헤더에 http://www.springframework.org/schema/security/spring-security-3.1.xsd를 사용하고 있습니다. 이 URL을 탐색하면로드 된 xsd가 authentication-manager-ref 속성을 http 요소에 선언하지만 spring-security-config-3.1.0.RC2.jar의 xsd는 그렇지 않습니다.

    스프링 소스 jira-> https://jira.springsource.org/browse/SEC-1879에서 문제를 만들었습니다.

    spring-security-config-3.1.0.RC3.jar에 포함 된 xsd를 올바른 것으로 바꾸었고 org.xml.sax.SAXParseException이 더 이상 발생하지 않지만 보안에서 두 개의 인증 관리자 bean을 선언 할 수 없습니다 .xml.

  3. from https://stackoverflow.com/questions/8306063/multiple-login-forms-different-authentication-managers-latest-spring-security by cc-by-sa and MIT license