Как установить роль в DataSource из Spring - PullRequest
1 голос
/ 07 июля 2010

Я должен использовать роль по умолчанию, чтобы после того, как источник данных был определен и подключен, эта роль позволит мне использовать операторы выбора. Я знаю, это немного странно, но я должен сделать это из соображений безопасности. Итак, вот код в моем приложении SpringContext.xml:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
    <property name="driverClassName" value="com.ibm.db2.jcc.DB2Driver" />
    <property name="url"
            value="jdbc:db2://host_name:Port/DB_NAME:INFORMIXSERVER=SERVER_NAME;DELIMIDENT=y;" />
    <property name="username" value="user" />
    <property name="password" value="password" />
    <property name="minIdle" value="2" />
</bean>

Все хорошо, я могу подключиться к источнику данных, но мне также нужно сообщить базе данных, что все запросы будут проходить через эту РОЛЬ, чтобы у меня были права выбора и прочее: Для командной строки я делаю так:

set role ROLE_ACCESS_SELECT;

перед выполнением команд sql, но не знаете, как его настроить.

Пожалуйста, совет.

Ответы [ 2 ]

6 голосов
/ 08 июля 2010

DBCP BasicDataSource позволяет передавать операторы SQL для выполнения во время инициализации соединения. Примерно так:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
    destroy-method="close">
    <property name = "connectionInitSqls">
        <list><value>set role ROLE_ACCESS_SELECT</value></list>
    </property>
    ...
</bean>
1 голос
/ 08 июля 2010

Неважно, я исправил эту проблему.Спасибо всем, кто посмотрел мой пост, решение выглядит так:

добавьте эту строку после minIdle свойство:

<property name="initSQLCommands">
            <list>
                <value>SET ROLE ROLE_WEB_OPERATORS</value>
            </list>
        </property>

и определите класс, такой как:

public class ExtendedBasicDataSource extends BasicDataSource {
    public void setInitSQLCommands(List<String> initSQLCommands) {
        this.initSQLCommands = initSQLCommands;
        setConnectionInitSqls(initSQLCommands);
    }

}

И используйте этот компонент вместо org.apache.commons.dbcp.BasicDataSource при определении компонента источника данных в ApplicationContext.xml Spring.

...