Das Passwort, auf das Sie sich beziehen, unterscheidet sich höchstwahrscheinlich von dem, das Benutzer beim Anmelden angegeben haben. Der Anwendungsfall ist aus der Frage nicht eindeutig, aber anscheinend versuchen Sie, den Benutzernamen/das Kennwort externer Benutzer zu verwenden, um eine Verbindung zu JMS Connection Factory herzustellen. Das klingt für mich architektonisch nicht sicher. Sie sollten nur eine Berechtigung für die Verbindung mit ConnectionFactory verwenden, die geschützt werden muss (behandeln Sie sie wie db-Verbindungen). Besser ist es, JNDI zu verwenden, um ConnectionFactory zu suchen und die Benutzer-/Passwortverwaltung zu umgehen.
jedoch, falls Sie die Technik verwenden können, verwenden Sie Code Baustein.Anschluss folgende kopiere es aus Gitblit Projekt, wie es in meiner Finsternis
Mit Java8 Base64-Klasse offen war:
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);
Sie haben Recht mit der Architektur. Ich habe seitdem den Ansatz aufgegeben und nur den Anmeldungs-freien javax.jms.ConnectionFactory.createConnection() -Ansatz übernommen. –
Danke. Es hat funktioniert, aber mit einem Tweak. Aber Sie können 'Base64' nicht als statische Klasse aufrufen. Ich habe: Base64 b = neue Base64(); \t \t \t Zeichenfolge Anmeldeinformationen = neue Zeichenfolge (b.decode (Base64Credentials), Charset.forName ("UTF-8")); – iankits
@iankits Java 8 Semantik ist etwas anders. –