Каков наилучший способ поддержки префикса "ROLE_" для Spring Security?

Если вы поддерживаете старое приложение, которое не имеет префиксов для всех ролей, каков наилучший способ поддержки префикса "ROLE_"? Есть ли способ игнорировать или опускать его при загрузке?

1 ответ

Решение

Кажется, не существует простого способа игнорировать префикс в нормальной конфигурации безопасности пружины. Однако я обнаружил, что вы можете легко добавить "ROLE_" ко всем своим ролям при загрузке из базы данных. Я просто использую функцию CONCAT в MySQL, чтобы добавить "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>

Эта концепция также может быть применена, если вы создаете свой собственный класс с помощью интерфейса UserDetailsService:

<!-- 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" />

ПРИМЕЧАНИЕ: я использую "псевдоним" для "диспетчера аутентификации" вместо идентификатора, потому что моя настройка, кажется, игнорируется во время процесса аутентификации, если я переопределяю идентификатор по умолчанию.

Другие вопросы по тегам