从REST Web服务中的curl命令获取参数

时间:2011-05-04 01:44:44

标签: java web-services curl parameters restful-authentication

我想使用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

1 个答案:

答案 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>