Mật khẩu bạn đang đề cập có thể khác với mật khẩu do người dùng cung cấp khi đăng nhập. Trong khi trường hợp sử dụng không rõ ràng từ câu hỏi, nhưng có vẻ như bạn đang cố gắng sử dụng tên người dùng/mật khẩu được cung cấp bởi người dùng bên ngoài để tạo kết nối đến Nhà máy kết nối JMS. Điều này nghe không an toàn về mặt kiến trúc đối với tôi. Bạn chỉ nên sử dụng một thông tin xác thực để kết nối với ConnectionFactory cần được bảo vệ (xử lý nó như kết nối db). Tốt hơn là sử dụng JNDI để tra cứu ConnectionFactory và bỏ qua công cụ quản lý tên người dùng/mật khẩu.
Tuy nhiên, trong trường hợp bạn phải sử dụng kỹ thuật này, có thể sử dụng đoạn mã sau block.I đang sao chép nó từ dự án Gitblit như nó đã được mở trong nhật thực của tôi
Sử dụng Java8 Base64 lớp:
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);
Nguồn
2013-04-14 15:38:57
Bạn nói đúng về kiến trúc. Tôi đã từ bỏ cách tiếp cận này và chỉ chấp nhận phương thức javax.jms.ConnectionFactory.createConnection() không có giấy uỷ nhiệm. –
Cảm ơn. Nó hoạt động nhưng với một tinh chỉnh. Nhưng bạn không thể gọi 'Base64' là lớp tĩnh. Tôi đã làm: Base64 b = new Base64(); \t \t \t Thông tin đăng nhập chuỗi = chuỗi mới (b.decode (base64Credentials), Charset.forName ("UTF-8")); – iankits
@iankits Java 8 ngữ nghĩa hơi khác nhau. –