Buone opzioni sono state date, un'altra risposta ovvia è quella di utilizzare il PropertyPlaceholderConfigurer:
<context:property-placeholder
system-properties-mode="OVERRIDE"
location="classpath:database.properties" />
<bean id="dataSource" class="com.whatever.datasource.you.Use">
<property name="password" value="${database.password}" />
</bean>
Ora è possibile mantenere la password sia come una proprietà in un file di proprietà (che si potrebbe creare durante la distribuzione se non si desidera averlo in SCM) o come una proprietà di sistema (che si spera anche non sia raggiungibile da altri sviluppatori).
Chiarimento:creare durante la distribuzione è un po 'vago. Immagino che dovrai scrivere un programma di installazione che generi dinamicamente il file delle proprietà sul computer dell'utente finale, probabilmente abbinato a un meccanismo di registrazione/accesso.
EDIT: non ho ancora capito chi si nasconde le informazioni. Due teorie:
a) Le persone che hanno accesso al codice sorgente di
b) i vostri clienti
Se si tratta di una), poi vanno a modo mio. Tutti gli altri modi possono essere facilmente violati dall'altro sviluppatore, avviando l'applicazione con un debugger (e improvvisamente si trova all'interno dell'oggetto datasource e vede la password).
Se è b), quindi non hai possibilità, in pratica. Il cliente ha un sacco di possibilità per ottenere la tua password: debugger, agenti, manipolazione di bytecode, tessitura del tempo di caricamento ecc. Anche se non lo fa, dovrà solo collegare uno sniffer di porta per ottenere la password in chiaro testo. L'unica cosa sicura da fare è avere un nome utente/password per cliente (non memorizzare mai una password globale sulla macchina del cliente).
fonte
2010-11-16 17:15:51
Questo sarebbe più flessibile se si utilizzasse il modello decoratore (ad es. la tua origine dati contiene un'altra origine dati e inoltra tutto tranne la password) –
Touche SP! Questo è stato veloce per dimostrare che si può fare. Ma l'OP può ridisegnarlo come vuole. – CoolBeans
grazie bel consiglio! – blow