La password a cui si fa riferimento è probabilmente diversa da quella fornita dagli utenti durante il login. Mentre il caso d'uso non è chiaro dalla domanda, ma sembra che tu stia cercando di usare il nome utente/password fornito da utenti esterni per creare una connessione a JMS Connection Factory. Questo non mi sembra architettonicamente sicuro. È necessario utilizzare una sola credenziale per connettersi a ConnectionFactory che deve essere protetto (trattarlo come le connessioni db). Meglio usare JNDI per cercare ConnectionFactory e bypassare il nome utente/password.
Tuttavia, nel caso in cui si deve usare la tecnica, può utilizzare i seguenti codici block.I sono la copia dal progetto Gitblit come è stato aperto nel mio Eclipse
Utilizzando classe Java8 Base64:
final String authorization = httpRequest.getHeader("Authorization");
if (authorization != null && authorization.startsWith("Basic")) {
// Authorization: Basic base64credentials
String base64Credentials = authorization.substring("Basic".length()).trim();
String credentials = new String(Base64.getDecoder().decode(base64Credentials),
Charset.forName("UTF-8"));
// credentials = username:password
final String[] values = credentials.split(":",2);
fonte
2013-04-14 15:38:57
Hai ragione riguardo all'architettura. Da allora ho abbandonato l'approccio e ho appena adottato l'approccio javax.jms.ConnectionFactory.createConnection() senza credenziali. –
Grazie. Ha funzionato, ma con un ritocco. Ma non puoi chiamare Base64 come classe statica. Ho fatto: Base64 b = new Base64(); \t \t \t Credenziali stringa = nuova stringa (b.decode (base64Credentials), Charset.forName ("UTF-8")); – iankits
@iankits Java 8 semantics è leggermente diverso. –