1

すべてのロールにプレフィックスがない古いアプリケーションをサポートしている場合、「ROLE_」プレフィックスをサポートする最善の方法は何ですか? ロードを無視または省略する方法はありますか?

4

1 に答える 1

1

通常の春のセキュリティ構成内でプレフィックスを無視する簡単な方法はないようです。ただし、データベースからロードするときに、すべてのロールに「ROLE_」を簡単に追加できることがわかりました。MySQL 内で CONCAT 関数を使用して、すべてのロールに「ROLE_」を追加します。下記参照:

<authentication-manager>
    <authentication-provider>
        <password-encoder hash="md5"/>
        <jdbc-user-service
            data-source-ref="dataSource"
            authorities-by-username-query="SELECT username, CONCAT('ROLE_', rolename) as authority FROM user_role WHERE active = 1 AND username = ?"
            users-by-username-query="SELECT username, password, active FROM user WHERE username = ?" />
    </authentication-provider>
</authentication-manager>

この概念は、UserDetailsS​​ervice インターフェイスを使用して独自のクラスを作成する場合にも適用できます。

<!-- Select users and user_roles from database -->
<authentication-manager alias="authenticationManager">
    <authentication-provider user-service-ref="myUserDetailsService">
        <password-encoder ref="encoder" />
    </authentication-provider>
</authentication-manager>

<beans:bean id="encoder" class="com.my.security.MyPasswordEncoder" />

注: デフォルト ID をオーバーライドすると、認証プロセス中にカスタマイズが無視されるように見えるため、ID の代わりに「authentication-manager」に「エイリアス」を使用します。

于 2015-11-02T14:41:59.283 に答える