2010-07-07 6 views
1

Je dois utiliser un rôle par défaut afin qu'après la définition et la connexion de la source de données, ce rôle me permette d'utiliser des instructions select. Je sais que c'est un peu bizarre mais je dois le faire pour des raisons de sécurité. Voici donc le code dans applicationContext.xml de mon ressort:Comment définir un rôle dans DataSource à partir du printemps

<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> 

Tout va bien, je suis en mesure de se connecter à la source de données, mais je dois aussi dire que la base de données toutes les requêtes seront dans ce rôle pour que je ont des droits de sélection et d'autres choses: pour invite de commande que je fais comme ceci:

set role ROLE_ACCESS_SELECT; 

avant d'exécuter des commandes sQL, mais ne sais pas comment le configurer ici.

Veuillez nous consulter.

Répondre

6

Le protocole BasicDataSource de DBCP vous permet de transmettre des instructions SQL à exécuter lors de l'initialisation de la connexion. Quelque chose comme ceci:

<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

Peu importe, j'ai résolu ce problème. Merci à tous ceux qui ont regardé mon post la solution est comme ceci:

ajouter cette ligne après minidle propriété:

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

et définissent une classe telle que:

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

} 

et utilisation ce bean au lieu de org.apache.commons.dbcp.BasicDataSource lors de la définition du bean datasource dans le fichier ApplicationContext.xml de Spring.

+0

La suggestion d'axtavt est meilleure, car elle ne nécessite aucun codage supplémentaire ... Je pense que vous devriez signaler sa réponse comme réponse ... –

+0

@HansWesterbeek: La réponse d'Enrique est la meilleure version de ce que dit axtavt (il a synthax correct) et il vous montre comment le programmer si vous le souhaitez. +1 –

Questions connexes