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 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.
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:
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:
<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:
In alternativa, è possibile utilizzare direttamente le resource injection:
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.