복붙노트

[SPRING] 봄 보안 : intercept-url 패턴 access = "# id == 1

SPRING

봄 보안 : intercept-url 패턴 access = "# id == 1

내가 프로젝트를 가지고 아이엠 봄 보안 3.1.3 및 MVC 3.2

나는 경로에있는 userid에있는 wehen URL이 주 사용자 아이디와 일치하도록하고 싶다.

    <security:intercept-url pattern="/user/{id}/edit" access="#id == principal.userId"/>

http use-expressions은 true로 설정하고 principal.userId == 1을 시도하면 작동하지만 url에서 추출한 값을 사용해야합니다.

이미 가능한 모든 조합을 시도했습니다.

해결법

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

    1.그것은 불가능합니다. 그러나 다른 방법이 있습니다. URL에서 id 매개 변수의 추출을 담당 할 자체 웹 표현식을 정의 할 수 있습니다. 다음과 같이 보일 수 있습니다.

    그것은 불가능합니다. 그러나 다른 방법이 있습니다. URL에서 id 매개 변수의 추출을 담당 할 자체 웹 표현식을 정의 할 수 있습니다. 다음과 같이 보일 수 있습니다.

    <security:intercept-url pattern="/user/{id}/edit" access="getIdUrlPathParameter() == principal.userId"/>
    

    그렇게하려면 다음이 필요합니다.  1. WebSecurityExpressionRoot를 확장하는 CustomWebSecurityExpressionRoot를 추가하십시오.  2. getIdUrlPathParameter () 메소드를 추가하십시오. HttpServletRequest 객체에 액세스 할 수 있습니다.  3. DefaultWebSecurityExpressionHandler를 확장하는 CustomWebSecurityExpressionHandler를 정의하십시오. createSecurityExpressionRoot 메서드를 재정의하십시오. 여기서 CustomWebSecurityExpressionRoot를 사용하십시오.  4. 사용자 지정 액세스 결정 관리자 (아래 XML) 정의  5. access-decision-manager-ref 속성을 통해 http 요소에 삽입하십시오.

    <security:http access-decision-manager-ref="customAccessDecisionManagerBean" >
        <security:intercept-url pattern="/user/{id}/edit" access="getIdUrlPathParameter() == principal.userId"/>
    </security:http>
    <bean id="customWebSecurityExpressionHandler" class="com.domain.security.CustomWebSecurityExpressionHandler"/>
    <bean id="customAccessDecisionManagerBean" class="org.springframework.security.access.vote.AffirmativeBased">
        <property name="decisionVoters">
            <list>
                <bean class="org.springframework.security.web.access.expression.WebExpressionVoter">
                    <property name="expressionHandler" ref="customWebSecurityExpressionHandler" />
                </bean>
            </list>
        </property>
    </bean>
    
  2. ==============================

    2.Spring Security에서는이를 수행 할 수 없습니다.

    Spring Security에서는이를 수행 할 수 없습니다.

  3. from https://stackoverflow.com/questions/14185070/spring-securityintercept-url-pattern-access-id-1 by cc-by-sa and MIT license