什么是支持"角色_"的最佳方式。 Spring Security的前缀?

时间:2015-11-02 14:41:59

标签: java spring-security legacy-app

如果您支持的是没有所有角色前缀的旧应用程序,那么支持" ROLE _"的最佳方式是什么?字首?有没有办法忽略或忽略加载?

1 个答案:

答案 0 :(得分:1)

在正常的spring安全配置中,似乎没有一种简单的方法可以忽略前缀。但是,我发现你可以轻松追加" 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" />

注意:我使用&#34;别名&#34;对于&#34;身份验证管理器&#34;而不是ID,因为如果我覆盖默认ID,我的自定义似乎在身份验证过程中被忽略。