1

私はそのような状況に遭遇しました:私のアプリケーションにはいくつかの役割(管理者、モデレーター、ユーザー)があります。モデレーターとユーザーはいくつかのフォームを編集できます。すべての許可は大丈夫です。しかし、ユーザー(ロールユーザー)としてログインし、URLのIDを変更すると、別のユーザー(ロールユーザー)のフォームを取得して編集するだけで済みます。

アクセスを拒否し、そのようなアクションを防ぐ方法は?

ps。春と春のセキュリティのバージョンは3.1.2です

更新-春のセキュリティコンテキストを追加

<?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-3.1.xsd
                    http://www.springframework.org/schema/security
                    http://www.springframework.org/schema/security/spring-security-3.1.xsd">

    <http use-expressions="true" auto-config="false"
        entry-point-ref="authenticationEntryPoint" access-denied-page="/403.jsp">
        <form-login login-page="/login.html"
            authentication-failure-url="/login.html?error=true"
            login-processing-url="/j_spring_security_check"
            authentication-success-handler-ref="successHandler" />
        <logout logout-url="/logout" logout-success-url="/login.html" />
        <intercept-url pattern="/admin/**" access="hasRole('adminViewPermission')" />
        <intercept-url pattern="/moderator/**" access="hasRole('moderatorViewPermission')" />

        <intercept-url pattern="**/form-management"
            access="hasRole('formManagementPermission')" />

    </http>


    <authentication-manager alias="authenticationManager">
        <authentication-provider user-service-ref="userDetailsService" />
    </authentication-manager>

    <beans:bean id="authenticationEntryPoint"
        class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint">
        <beans:property name="loginFormUrl" value="/login.html" />
        <beans:property name="forceHttps" value="false" />
    </beans:bean>

    <beans:bean id="successHandler"
        class="org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler">
        <beans:property name="defaultTargetUrl" value="/authenticate" />
        <beans:property name="alwaysUseDefaultTargetUrl" value="true"/>
    </beans:bean>

    <beans:bean id="userDetailsService"
        class="com.jack.MyYserDetailsService">
    </beans:bean>
</beans:beans>
4

1 に答える 1

3

セキュリティ ルールに実際のドメイン オブジェクトを考慮したいようです。ユーザーとロールを使用した通常の SpringSecurity セットアップでは、次のようなセキュリティ ルールを追加できます。次のような拡張ルールを使用できるようにしたい場合: 誰 (何らかのロールを持つ認証済みユーザー) が URL / メソッド呼び出しにアクセスできるか、および彼が使用できるドメイン オブジェクトは、ACL 機能を使用する必要があります。

編集。ただし、このようなセキュリティ ルールが1 つだけ必要な場合は、ACL を設定するのはやり過ぎかもしれません。カスタム Web セキュリティ式を使用して、実際の SpringSecurity セットアップを強化してみることができます。

<intercept-url pattern="/moderator/**" access="hasRole('moderatorViewPermission') and userIsAuthor()" />

userIsAuthor()メソッドの場所:

  • URLからオブジェクトのIDを抽出します(/moderator/item/56のようなものだと思います)
  • 現在のユーザーがアイテム ID = 56 の作成者かどうかを確認します。
于 2013-01-11T10:45:29.603 に答える