2010-07-07 161 views
1

我必须使用默认角色,以便在数据源被定义并连接后,该角色将允许我使用select语句。我知道它有点奇怪,但我必须这样做是出于安全考虑。因此,这里是我的Spring的applicationContext.xml中的代码:如何在Spring DataSource中设置角色

<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命令之前,但不知道如何设置它在这里。

请指教。

回答

6

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

没关系,我已经解决了这个问题。感谢所有谁看了我的文章的解决办法是这样的:

后添加此行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); 
    } 

} 

而且使用该bean代替org.apache.commons.dbcp.BasicDataSource,同时在Spring的ApplicationContext.xml中定义数据源bean。

+0

axtavt的建议是更好的,因为它不需要任何额外的代码...我认为你应该标记他的回答作为答案... – 2010-07-07 21:05:04

+0

@HansWesterbeek:恩里克的(自我)的回答基本上是什么axtavt说的更好的版本(它有正确的synthax),它会告诉你如何以编程方式设置它,如果你想。 +1 – 2011-11-07 15:29:34