Каков наилучший способ поддержки префикса "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" />
ПРИМЕЧАНИЕ: я использую "псевдоним" для "диспетчера аутентификации" вместо идентификатора, потому что моя настройка, кажется, игнорируется во время процесса аутентификации, если я переопределяю идентификатор по умолчанию.