Jin*_*Kim 31 java servlets jms basic-authentication
我正在使用Java BASIC身份验证.
我的Servlet发送了一条JMS消息,但是我需要提供用户和密码来在创建连接时对自己进行身份验证:
javax.jms.ConnectionFactory.createConnection(String username, String password)
Run Code Online (Sandbox Code Playgroud)
我可以从HttpServletRequest.getUserPrincipal()中检索用户名.但似乎无法检索密码.我该如何解决这个问题?
Akh*_*ngh 84
您所指的密码很可能与用户在登录时提供的密码不同.虽然问题的用例不明确,但看起来您正在尝试使用外部用户提供的用户名/密码来创建与JMS连接工厂的连接.这对我来说在建筑上听起来并不安全.您应该只使用一个凭据连接到需要保护的ConnectionFactory(将其视为数据库连接).更好的方法是使用JNDI查找ConnectionFactory并绕过用户名/密码管理.
但是,如果你必须使用这种技术,可以使用下面的代码块.我在Gitblit项目中复制它,因为它是在我的日食中打开的
使用Java8 Base64类:
final String authorization = httpRequest.getHeader("Authorization");
if (authorization != null && authorization.toLowerCase().startsWith("basic")) {
// Authorization: Basic base64credentials
String base64Credentials = authorization.substring("Basic".length()).trim();
byte[] credDecoded = Base64.getDecoder().decode(base64Credentials);
String credentials = new String(credDecoded, StandardCharsets.UTF_8);
// credentials = username:password
final String[] values = credentials.split(":", 2);
}
Run Code Online (Sandbox Code Playgroud)