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