복붙노트

[SPRING] 데이터베이스 나 속성으로부터 Spring 보안 인터셉트 URL 가져 오기

SPRING

데이터베이스 나 속성으로부터 Spring 보안 인터셉트 URL 가져 오기

바라기를 이것은 아주 간단하고, 존재하고, 나는 코의 바로 아래 뭔가를 내려다보고 있습니다. 주석을 통해 액세스를 제한 할 수 있다는 것을 알고 있습니다.

@Secured({"ROLE_ADMIN"})

또는 설정을 통해 :

<security:intercept-url pattern="/**" access="ROLE_USER, ROLE_ADMIN, ROLE_SUPER_USER" />

데이터베이스와 같은 인증 규칙을 얻는 것을 선호합니다.

<security:intercept-url provider="authProvider"/>

<bean id="authProvider" class="AuthProviderImpl">
    <property name="userDetailsService" ref="userDetailsService"/>
</bean>

최악의 시나리오는 속성 파일을 통해 채울 수있는 방법이 있어야합니다. ...

/ admin / ** = ROLE_ADMIN / ** = ROLE_USER

<security:intercept-url props="classpath:urls.properties"/>

기타

이것이 존재하는지 아니면 내 뇌가 폭발할지 말해주세요! Grails spring-security plugin은이 패키지와 함께 제공되기 때문에 이것이 존재해야한다는 것을 알고 있습니다. 제 뇌가 폭발하지 않도록하십시오 !!!

편집하다:

그것을 알아 낸 ...

사용자 정의 org.springframework.security.intercept.web.FilterSecurityInterceptor를 제공하고 objectDefinitionSource를 제공해야합니다.

<bean id="filterSecurityInterceptor" class="org.springframework.security.intercept.web.FilterSecurityInterceptor">
    <security:custom-filter before="FILTER_SECURITY_INTERCEPTOR" />
    <property name="authenticationManager" ref="authenticationManager" />
    <property name="accessDecisionManager" ref="accessDecisionManager" />
    <property name="objectDefinitionSource">
        <value>
            CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
            PATTERN_TYPE_APACHE_ANT
            /**login.html=IS_AUTHENTICATED_ANONYMOUSLY
            /user/**=ROLE_ADMIN
        </value>
    </property>
</bean>

FactoryBean을 사용하려고합니다.

public class RequestMappingFactoryBean implements FactoryBean {

    private final static String EOL = System.getProperty("line.separator");

    public Object getObject() throws Exception {
        StringBuffer sb = new StringBuffer();
        sb.append("CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON");
        sb.append(EOL);
        sb.append("PATTERN_TYPE_APACHE_ANT");
        sb.append(EOL);
        sb.append("/**login.html=IS_AUTHENTICATED_ANONYMOUSLY");
        sb.append(EOL);
        sb.append("/user/**=ROLE_ADMIN");
        return sb.toString();
    }

    @SuppressWarnings("unchecked")
    public Class getObjectType() {
        return String.class;
    }

    public boolean isSingleton() {
        return true;
    }

}

DAO 등을 전달하십시오.

<bean id="filterSecurityInterceptor" class="org.springframework.security.intercept.web.FilterSecurityInterceptor">
    <security:custom-filter before="FILTER_SECURITY_INTERCEPTOR" />
    <property name="authenticationManager" ref="authenticationManager" />
    <property name="accessDecisionManager" ref="accessDecisionManager" />
    <property name="objectDefinitionSource" ref="requestMappings" />
</bean>

<bean id="requestMappings" class="RequestMappingFactoryBean" />

해결법

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

    1.그것은 오래되었지만 URL에 대한 액세스 허용 여부를 결정하는 데 도움이되는 Voter 객체를 만들 수 있습니다. 유권자 객체는 데이터베이스 또는 파일에서 데이터를로드하거나 무작위로 Allow, Deny 또는 Abstain을 반환 할 수 있습니다.

    그것은 오래되었지만 URL에 대한 액세스 허용 여부를 결정하는 데 도움이되는 Voter 객체를 만들 수 있습니다. 유권자 객체는 데이터베이스 또는 파일에서 데이터를로드하거나 무작위로 Allow, Deny 또는 Abstain을 반환 할 수 있습니다.

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

    2.당신이 봄 xml에서 이런 식으로 뭔가를 사용 하시겠습니까?

    당신이 봄 xml에서 이런 식으로 뭔가를 사용 하시겠습니까?

    <!-- Settings -->
    <b:bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <b:property name="locations">
            <b:value>/WEB-INF/config.properties</b:value>
        </b:property>
    </b:bean>
    

    그리고 나서 Spring XML에도 포함되어있다.

    <http entry-point-ref="authenticationProcessingFilterEntryPoint">
            <intercept-url pattern='/custom/**' access="${roles.admin}"/>
    </http>
    
  3. from https://stackoverflow.com/questions/2315873/get-spring-security-intercept-urls-from-database-or-properties by cc-by-sa and MIT license