В настоящее время я работаю над приложением на основе Java. Что мне нужно, авторизовать пользователя с несколькими ролями, например, Питер должен иметь роль ROLE_SETTING, ROLE_REPORT, ROLE_QUOTE, в то время как Энн имеет только одну роль ROLE_SETTING и т.д. ...Spring security jdbc config для пользователя auth с несколькими ролями
Вот моя весна-безопасности config.xml
<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.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.2.xsd">
<http auto-config="true">
<access-denied-handler error-page="/403page" />
<intercept-url pattern="/makebill*" access="ROLE_ADMIN,ROLE_MAKEBILL" />
<intercept-url pattern="/report*" access="ROLE_ADMIN,ROLE_REPORT" />
<intercept-url pattern="/stock*" access="ROLE_ADMIN,ROLE_STOCK" />
<intercept-url pattern="/customer*" access="ROLE_ADMIN,ROLE_CUSTOMER" />
<!-- <intercept-url pattern="/setting*" access="ROLE_ADMIN,ROLE_SETTING" /> -->
<intercept-url pattern="/mainmenu*" access="ROLE_ADMIN,ROLE_MAKEBILL,ROLE_SETTING,ROLE_CUSTOMER,ROLE_REPORT,ROLE_STOCK" />
<form-login
login-page='/login' username-parameter="username"
password-parameter="password" default-target-url="/mainmenu"
authentication-failure-url="/login?authfailed" />
<logout logout-success-url="/login?logout" />
</http>
<authentication-manager>
<authentication-provider>
<jdbc-user-service
data-source-ref="dataSource"
users-by-username-query="select username,password, enabled from person where username=?"
authorities-by-username-query="select username, role from person, role where username =? " />
</authentication-provider>
</authentication-manager>
</beans:beans>
аутентификации-менеджер в настоящее время работает нормально только с одной ролью, что я имею в виду ... когда работает SQL запрос authorities-by-username-query="select username, role from person, role where username =? "
, если возвращаемое значение только одна роль, например ROLE_REPORT
, приложение работает отлично, но если есть запись в db like, ROLE_REPORT,ROLE_SETTING,ROLE_CUSTOMER
, когда запрос получает это значение, приложение вернет мне ошибку 404, похоже, я не смогу предоставить пользователю m исключительные роли.
Может кто-нибудь указать мне, что я сделал неправильно. Спасибо.
Есть несколько мест, которые необходимо исправить. Во-первых, запрос по имени пользователя не подходит. Я думаю, что вы новичок в SQL-запросе. Вы извлекаете 2 таблицы, не присоединяя их к какому-либо ключу. Пожалуйста, взгляните на это http://stackoverflow.com/questions/20455139/users-by-username-query-returns-no-results. Это может не решить всю вашу проблему. Дайте мне знать, если у вас другая проблема. – Tin
Вы можете найти этот учебник полезным: http://www.mkyong.com/spring-security/spring-security-form-login-using-database/ – Tin
mkyong's tut предназначен для предоставления одной роли для одного пользователя, что мне нужно множественная роль для одного пользователя ... – seph