2010-07-07 159 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