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

标签 java web-services curl parameters restful-authentication

我想使用纯Java类从REST Web服务中的curl命令获取用户名和密码。 我的java类是

@GET 公共(public)响应检查(字符串用户名,字符串密码) { 认证..... }

我使用带有 jersey 框架的 Netbean IDE。我在 POJO java 类中创建了 Web 服务。 有谁知道如何在Web服务java类中获取用户名和密码? 我的curl命令如下:

curl -u 用户名:密码 http://localhost:8080/project/resources

最佳答案

如果这是基于您的问题 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 ,为您提供由 username:password 组成的 Base64 编码字符串形式的用户名和密码。要获取这些值,您需要解析、base64 解码并再次解析。您提供的curl命令会将以下 header 添加到请求中:

Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=

在我之前提供的代码片段中,authHeader 将具有值

Basic dXNlcm5hbWU6cGFzc3dvc.mQ=

获取用户名和密码就像这样

String[] pair = base64decode(authHeader.split(" ")[1]).split(":");

在该代码中,将 base64decode 替换为您选择的 Base64 解码库。在此调用之后,用户名将位于 pair[0] 中,密码将位于 pair[1] 中。请注意,所有这些代码都缺乏生产代码所需的空值和边界检查以及异常处理。它还仅支持基本身份验证。如果您需要支持其他身份验证方法,您将需要处理该方法所需的任何解码和解析。

在我看来,JAX-RS 更适合使用 SecurityContext 方法并依赖容器来验证请求,因此请了解使用 HttpHeaders 方法。

关于java - 从REST Web服务中的curl命令获取参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5877596/

相关文章:

java - 多文件读取循环并区分 .pdf 和 .doc 文件

java - Java中的Json数组

java - Axis2 更改默认服务端口

php - PHP 中是否有不使用 cURL 的更简单的 HTTP POST?

php - 检查图像是否存在于远程 URL 上

PHP、IDE、MySQL、Curl API 和 apache 安装

java - 谁能解释我在编译这个程序时得到的输出?

java - Java JMF 如何控制我的 Mac 相机?

java - 如何在 SoapUI 工具的 SOAP 请求中指定复杂数据类型输入

c# - 如何从 C# Controller 重定向到外部 URL