我正在使用Java进行HTTP基本身份验证。
我的Servlet发送JMS消息,但是在创建连接时需要提供用户名和密码以进行身份验证:
javax.jms.ConnectionFactory.createConnection(String username, String password)
我可以通过 HttpServletRequest.getUserPrincipal() 方法获取用户名,但似乎没有办法检索密码。我该如何解决这个问题?
我正在使用Java进行HTTP基本身份验证。
我的Servlet发送JMS消息,但是在创建连接时需要提供用户名和密码以进行身份验证:
javax.jms.ConnectionFactory.createConnection(String username, String password)
我可以通过 HttpServletRequest.getUserPrincipal() 方法获取用户名,但似乎没有办法检索密码。我该如何解决这个问题?
使用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);
}
Authorization
头中发送的(经过base64编码),因此您可以使用它;但是,如果用户使用cookie维护会话,则不一定每次都发送该标头。那些正在寻找答案的人,即使问题早已被提出,这里是我的解决方案...
private void authenticate(HttpServletRequest request){
String upd=request.getHeader("authorization");
String pair=new String(Base64.decodeBase64(upd.substring(6)));
String userName=pair.split(":")[0];
String password=pair.split(":")[1];
}
Base64 是从 org.apache.commons.codec.binary.Base64 导入的。
.startsWith("Basic")
处失败。 - Adriaan KosterHTTP提供了一个简单的挑战-响应身份验证框架,服务器可以用它来挑战客户端请求,客户端可以用它来提供身份验证信息。**它使用不区分大小写的标记作为识别身份验证方案的手段**,然后是实现该方案所需的其他信息。
(强调添加) - imgx64