Connessione al database con JDBC e DataSource

Connettersi ad un database in applicazioni scritte in Java utilizzando il driver JDBC o con l’ausilio del DataSource per la sicurezza

Tutte le moderne applicazioni utilizzano un database dove memorizzare le informazioni, garantire l’accesso e la persistenza dei dati in modo sicuro ed efficiente è di fondamentale importanza. Il driver JDBC (Java DataBase Connectivity) consente l’accesso e la gestione della base dei dati in applicazioni Java, l’accesso può avvenire utilizzano direttamente il driver JDBC oppure con una combinazione tra JDBC e DataSource.

Connessione al database tramite JDBC

Per connettersi ad un database utilizzano il JDBC è necessario caricare il driver ed indicare l’indirizzo della base di dati con la username e la password d’accesso. Ecco un esempio:

  String username = "root";
  String password = "root";
  DriverManager.registerDriver(new com.mysql.jdbc.Driver());
  Class.forName("com.mysql.jdbc.Driver");
  connection = DriverManager.getConnection("jdbc:mysql://localhost/test?user=" + username + "&password=" + password);

Il driver viene registrato utilizzando la classe DriverManager che implementa il metodo registerDriver(), mentre i dati di accesso saranno indicati nel metodo getConnection() sempre di DriverManager. Come è possibile notare, questi dati si trovano nell’applicazione client, ciò significa esporre informazioni sensibili e dal punto di vista della manutenzione ad ogni cambio password dovremo aggiornare ogni singolo client con i dati memorizzati localmente.

JDBC API

Connessione al database con JDBC e DataSource

L’utilizzo di JDBC e DataSource consente di non memorizzare la username e la password sui dispositivi client, queste informazioni saranno completamente sconosciute ai client. I dati sensibili vengono memorizzati sul server e per accedervi sarà utilizzato il DataSource. Ecco un esempio per ottenere la connessione tramite DataSource:

  context = new InitialContext();
  dataSource = (DataSource) context.lookup("java:comp/env/jdbc/testcompany");
  connection = dataSource.getConnection();

Sul server nel file server.xml vengono impostati la username, la password e il nome della variabile da richiamare per accedere a questi dati. Nel nostro esempio i dati risponderanno al nome jdbc/testcompany:

  <GlobalNamingResources>
        <Resource auth="Container" driverClassName="com.mysql.jdbc.Driver" maxActive="100" maxIdle="30" maxWait="10000" name="jdbc/testcompany" password="root" type="javax.sql.DataSource" url="jdbc:mysql://localhost:3306/testcompany?autoReconnect=true" username="root"/>
  </GlobalNamingResources>

Nella cartella META-INF nel file context.xml verranno associati i dati:

  <ResourceLink global="jdbc/testcompany" name="jdbc/testcompany"type="javax.sql.DataSource"></ResourceLink>

In alternativa, è possibile utilizzare direttamente le resource injection:

  @Resource(name="jdbc/testcompany")
  private DataSource ds;

  // Ottieni la connessione al database
  Connection con = ds.getConnection();

Utilizzando il DataSource in combinando con il driver JDBC i dati di accesso al database non sono più memorizzate sul client, sarà possibile accedere ad un database senza conoscere direttamente i dati di accesso alla base di dati. Eventuali modiche alla username o alla password non influenzeranno in alcun modo l’applicazione client.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *