3

アプリケーションで役割階層を機能させるようにしています。私が欲しいのは、すべてのレベルで定義された階層です。URLレベルで、そして今のところビューレベルでも(私のjspファイルで)。

次の設定を使用します。

     <beans:bean id="accessDecisionManager" class="org.springframework.security.access.vote.AffirmativeBased">
        <beans:property name="decisionVoters">
            <beans:list>
                <beans:ref bean="roleHierarchyVoter"/>
                <beans:bean class="org.springframework.security.web.access.expression.WebExpressionVoter">
                    <beans:property name="expressionHandler">
                        <beans:bean class="org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler">
                            <beans:property name="roleHierarchy" ref="roleHierarchy"/>
                        </beans:bean>
                    </beans:property>
                </beans:bean>
                <beans:bean class="org.springframework.security.access.vote.AuthenticatedVoter"/>
            </beans:list>
        </beans:property>
    </beans:bean>

    <beans:bean id="roleHierarchyVoter" class="org.springframework.security.access.vote.RoleHierarchyVoter">
        <beans:constructor-arg ref="roleHierarchy"/>
    </beans:bean>

    <beans:bean id="roleHierarchy" class="org.springframework.security.access.hierarchicalroles.RoleHierarchyImpl">
        <beans:property name="hierarchy">
            <beans:value>
                ROLE_ADMIN > ROLE_OWNER
                ROLE_OWNER > ROLE_DISTRIBUTOR
                ROLE_DISTRIBUTOR > ROLE_RESELLER
                ROLE_RESELLER > ROLE_USER
            </beans:value>
        </beans:property>
    </beans:bean>

<http auto-config="true" use-expressions="true" access-decision-manager-ref="accessDecisionManager">
    ...
</http>

URLレベル(インターセプトURL)の場合は非常にうまく機能しますが、私のjspファイルでは機能しませんでした。問題は、役割階層を機能させるための構成を正しく理解していなかったことです。

<security:authorize access="hasRole('ROLE_ADMIN')">
    <div class="span4">
        <h2>Admin</h2>
    </div><!--/span-->
</security:authorize>
<security:authorize access="hasRole('ROLE_OWNER')">
    <div class="span4">
        <h2>Owner</h2>
    </div><!--/span-->
</security:authorize>
<security:authorize access="hasRole('ROLE_DISTRIBUTOR')">
    <div class="span4">
        <h2>Distributor</h2>
    </div><!--/span-->
</security:authorize>

この簡単な例を使用して、ビューレベルで役割階層をテストしますが、機能しません。管理者ロールを持つユーザーのみが自分のブロックを表示でき、他のユーザーは表示できません。

私が自分の設定で何が間違っているのかを誰かに知ってもらいました。

4

1 に答える 1

0

同じ問題がありました (Spring Security 3.2.5)。

セクションのDefaultWebSecurityExpressionHandler前にmy を宣言することで解決<http>

<!-- This must go before the http element in order to be used by security:authorize tags using the access attribute -->
<!-- https://jira.spring.io/browse/SEC-1452 -->
<beans:bean id="webSecurityExpressionHandler" class="org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler">
    <beans:property name="roleHierarchy" ref="roleHierarchy" />
</beans:bean>

https://jira.spring.io/browse/SEC-1452 および http://forum.spring.io/forum/spring-projects/security/67494-configuration-of-spring-security-3-0m1-expressionを参照 してください。 -handler-bug/page3

于 2015-01-22T13:17:53.220 に答える