4

iam spring security 3.1.3 と mvc 3.2 のプロジェクトがあります

パスのユーザー ID がプリンシパルのユーザー ID と一致する URL を許可したい

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

http use-expressions を true に設定し、principal.userId == 1 を試行すると機能しますが、URL から抽出された値を使用する必要があります。

私はすでにすべての可能な組み合わせを試しました。

4

2 に答える 2

6

不可能です。しかし、別の方法があります。URL から id パラメータを抽出する独自の Web 式を定義できます。次のようになります。

<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>
于 2013-01-07T15:38:49.813 に答える
0

これは、Spring Securityでは実行できません。

于 2013-01-06T22:03:57.467 に答える