如何从HTTP基本身份validation中获取密码

我正在使用Java BASIC身份validation。

我的Servlet发送JMS消息但我需要提供用户和密码以在创建连接时对自己进行身份validation:

javax.jms.ConnectionFactory.createConnection(String username, String password) 

我可以从HttpServletRequest.getUserPrincipal()中检索用户名。 但似乎无法检索密码。 我该如何解决这个问题?

您所指的密码很可能与用户在登录时提供的密码不同。 虽然问题的用例不明确,但看起来您正在尝试使用外部用户提供的用户名/密码来创建与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); } 

用户名和密码最初是在HTTP Authorization标头(base64编码)中发送的,因此您可以使用它; 但如果用户使用cookie维护会话,则每次都不一定会发送该标头。