我想使用Plain Java Class从REST web服务中获取curl命令的用户名和密码。 我的java类是
@GET public Response check(字符串用户名,字符串密码) { 认证..... }
我使用Netbean IDE和jersey框架。我在POJO java类中创建了Web服务。 有谁知道如何在Web服务java类中获取用户名和密码? 我的curl命令就像:
curl -u username:password http://localhost:8080/project/resources
答案 0 :(得分:2)
如果这是基于您的问题here中的代码,那么获取用户名就是向使用javax.ws.rs.core.SecurityContext
类型@Context
注释的资源添加新属性(让我们看看)称之为securityContext
)。然后你可以像这样访问用户名:
String username = securityContext.getUserPrincipal().getName();
但是,密码不能通过此API获得。只有在用户已经过容器验证的情况下,此方法才有效。要获取密码,该属性需要是javax.ws.rs.core.HttpHeaders
类型(我们称之为httpHeaders)。使用此对象,您必须调用
String authHeader = httpHeaders.getRequestHeader("Authorization").get(0);
使用您列出的curl命令将默认使用HTTP basic authentication,在base64编码的字符串中提供用户名和密码,该字符串由username:password组成。要获取这些值,您需要解析,base64解码并再次解析。您提供的curl命令会将以下标头添加到请求中:
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
在我之前提供的代码段中,authHeader
的值为
Basic dXNlcm5hbWU6cGFzc3dvc.mQ=
获取用户名和密码就像这样
String[] pair = base64decode(authHeader.split(" ")[1]).split(":");
在该代码中用您选择的base64解码库替换base64decode
。在此次通话后,用户名将在pair[0]
,密码将在pair[1]
。请注意,所有这些代码都缺少null和边界检查以及生产代码所需的异常处理。它还仅支持基本身份验证。如果您需要支持其他身份验证方法,则需要处理该方法所需的任何解码和解析。
在我看来,JAX-RS更倾向于使用SecurityContext
方法并依赖容器来验证请求,因此请使用HttpHeaders
方法了解所有警告。< / p>