Как проверить несколько таблиц в Spring Security для аутентификации - PullRequest
2 голосов
/ 31 декабря 2011

Я написал следующий код для обеспечения безопасности Spring в applicationContext-Security.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans"
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.0.xsd">

<global-method-security secured-annotations="enabled">
</global-method-security>

<!-- URL pattern based security -->


<http auto-config="true">
    <intercept-url pattern="/common/*" access="ROLE_ADMIN" />
     <form-login login-page="/login/login.jsp"/>
    <logout logout-success-url="/home/index.jsp"/>
</http>

<authentication-manager>
    <authentication-provider>

        <!-- <password-encoder hash="md5"/> <user-service> <user name="admin" 
            password="65dc70650690999922d7dcd99dbd4033" authorities="ROLE_ADMIN"/> </user-service> -->

        <jdbc-user-service data-source-ref="dataSource"
            authorities-by-username-query="
            select admin.userName as username, auth.authority as authority from Administrators admin, Authorities auth
            where admin.id=auth.AdministratorId and admin.userName= ?"
            users-by-username-query="select userName as username,hashedPassword as password, enabled as enabled
                                        from Administrators where userName= ?" />

    </authentication-provider>
</authentication-manager>

</beans:beans>

В этом xml-файле я могу проверять только роль администратора в таблице базы данных из базы данных. Как я могу проверить другую таблицу, такую ​​как таблица внутреннего пользователя, администратора и внешнего пользователя, чтобы проверить роли? Нужно ли писать запрос в новом классе, а не писать в XML. Пожалуйста, дайте мне любую идею или предложение, потому что я только начинаю это делать. Дайте мне любую ссылку или сайт или код для просмотра. спасибо

1 Ответ

5 голосов
/ 31 декабря 2011

Если вы будете искать поставщика аутентификации в определении схемы Spring Security , вы увидите, что он имеет неограниченное максимальное вхождение.Следовательно, вы можете добавить по одному <authentication-provider> для каждой таблицы, к которой вам нужно получить доступ внутри вашего </authentication-manager>, например,

<authentication-manager>
    <authentication-provider>
        <jdbc-user-service data-source-ref="dataSource"
            authorities-by-username-query="select [...] from Administrators" 
        .../>
    </authentication-provider>

    <authentication-provider>
        <jdbc-user-service data-source-ref="dataSource"
            authorities-by-username-query="select [...] from Users" 
        .../>
    </authentication-provider>
</authentication-manager>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...