복붙노트

[SPRING] 스프링 보안과 함께 여러 개의 보안 컨텍스트를 가질 수 있습니까?

SPRING

스프링 보안과 함께 여러 개의 보안 컨텍스트를 가질 수 있습니까?

내 응용 프로그램의 flex 부분에 PreAuthenticatedProcessingFilterEntryPoint를 사용하는 보안 컨텍스트 정의가 하나 있습니다. 내 응용 프로그램의 다른 부분에 html 양식을 사용하여 표준 양식 로그인을 사용하는 다른 정의를 어떻게 가질 수 있습니까? 여기 내가 현재 가지고있는 것 :

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


    <http auto-config="true" access-denied-page="/admin/access-denied">
        <intercept-url pattern="/admin/login*" filters="none"/>
          <intercept-url pattern="/admin/access-denied" filters="none"/>
        <intercept-url pattern="/admin/**/*" access="ROLE_ADMIN"  />
        <form-login login-page="/admin/login" authentication-failure-url="/admin/login?login_error=1"
           default-target-url="/admin/index" login-processing-url="/admin/login-process"/>
        <logout logout-success-url="/admin/login"/>

    </http>

<global-method-security  jsr250-annotations="enabled" />

    <beans:bean id="preAuthenticatedEntryPoint" class="org.springframework.security.ui.preauth.PreAuthenticatedProcessingFilterEntryPoint" >
    </beans:bean>


    <beans:bean id="userAccountManager" class="com.mycomp.service.managers.jpa.UserAccountJpaManager" />
    <beans:bean id="userService" class="com.mycomp.auth.DefaultUserDetailsService" />
    <beans:bean id="defaultPasswordEncoder" class="com.mycomp.auth.DefaultPasswordEncoder" />

    <authentication-provider user-service-ref="userService">
        <password-encoder ref="defaultPasswordEncoder"/>
    </authentication-provider>


</beans:beans>

내가 뭘하고 싶습니다 관리 사이트에있는 URL에 대한 다른 인증 공급자를 사용하고, 현재 가지고있는 플렉스 응용 프로그램입니다. 그래서 나는 다른 userDetailsService 빈을 사용하는 admin url에 대한 보안을 원한다.

해결법

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

    1.최근까지도 까다 롭지 만 지금은 쉽습니다!

    최근까지도 까다 롭지 만 지금은 쉽습니다!

    Spring Security는 버전 3.1의 시나리오에 대한 지원을 추가했습니다. 현재 SEC-1171에 의해 구현 된 출시 후보로 제공됩니다. 구문에 대한 자세한 내용은 3.1 설명서에 있습니다.

    사용하기가 아주 쉽습니다. 기본적으로 Spring 보안 설정에서 각 컨텍스트에 대해 하나씩 여러 개의 http 요소를 정의합니다. 우리는 이것을 다음과 같이 사용합니다 :

    <!-- Configure realm for system administration users -->
    <security:http pattern="/admin/**" create-session="stateless">
        <security:intercept-url pattern='/**' access='ROLE_ADMIN' requires-channel="https" />
        <security:custom-filter position="PRE_AUTH_FILTER" ref="preAuthFilter" />
    </security:http>
    
    
    <!-- Configure realm for standard users -->
    <security:http auto-config="true" access-denied-page="/error/noaccess" use-expressions="true" create-session="ifRequired">
        <security:form-login 
                ...
                ...
    </security:http>
    

    주목할 핵심 사항은 첫 번째 http 요소에서 pattern = "/ admin / **"입니다. 이것은 Spring에게 / admin 아래의 모든 URL이 기본 컨텍스트가 아닌 해당 컨텍스트에 종속된다는 것을 알려줍니다. 따라서 / admin 아래의 URL은 대신 사전 인증 필터를 사용합니다.

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

    2.각 필터 체인을 다른 URL 패턴에 매핑합니다.

    각 필터 체인을 다른 URL 패턴에 매핑합니다.

    <bean id="myfilterChainProxy"
       class="org.springframework.security.util.FilterChainProxy">
      <security:filter-chain-map pathType="ant">
      <security:filter-chain pattern="/flex" filters="filterF"/>
      <security:filter-chain pattern="/**" filters="filter1,filter2,filter3"/>
      </security:filter-chain-map>
    </bean>
    
  3. ==============================

    3.Spring Security 필터 체인이 어플리케이션의 어떤 부분을 가로 챌 것인가에 관한 것입니다. 어딘가에 XML 구성 (간단한 태그 설정을했는지 여부에 따라 다름)에 다음과 같은 인터셉트 정규식이 있습니다.

    Spring Security 필터 체인이 어플리케이션의 어떤 부분을 가로 챌 것인가에 관한 것입니다. 어딘가에 XML 구성 (간단한 태그 설정을했는지 여부에 따라 다름)에 다음과 같은 인터셉트 정규식이 있습니다.

    <intercept-url pattern="/**" ...>
    

    다른 구성을 사용하는 다른 가로 채기 패턴 (일명 보안 필터 체인의 다른 부분)을 가질 수 있습니다. 현재 구성 XML을 게시하면 좀 더 구체적인 답변을 드릴 수 있습니다.

    편집 : 현재 http 태그를 사용하여 스프링 보안 구성을 정의하고 있습니다. 이 태그는 바로 가기 / 도우미로 사용되며 자동으로 수동으로 설정할 수있는 많은 보안 필터 체인을 정의합니다. 귀하의 유스 케이스가 자동 설정 패러다임에 맞지 않기 때문에 수동으로 다른 URL 패턴에 대한 필터 체인을 설정해야합니다 (내 게시물에서 볼 수 있듯이). 사용자 정의 UserDetailsService를 취하는 자체 PreAuthenticationFilter를 만들고 필터 체인 인터셉트 매핑에 적절한 위치에 추가 할 수 있습니다.

  4. from https://stackoverflow.com/questions/1070420/can-i-have-multiple-security-contexts-with-spring-security by cc-by-sa and MIT license