Java 从REST web服务中的curl命令获取参数
我想使用普通Java类从RESTWeb服务中的curl命令中获取用户名和密码。 我的java类是 @得到 公共响应检查(字符串用户名、字符串密码) { 证明…是真实的 } 我在jersey框架中使用Netbean IDE。我在POJOJava类中创建了web服务。 有人知道如何在web服务java类中获取用户名和密码吗? 我的curl命令类似于:Java 从REST web服务中的curl命令获取参数,java,web-services,curl,parameters,restful-authentication,Java,Web Services,Curl,Parameters,Restful Authentication,我想使用普通Java类从RESTWeb服务中的curl命令中获取用户名和密码。 我的java类是 @得到 公共响应检查(字符串用户名、字符串密码) { 证明…是真实的 } 我在jersey框架中使用Netbean IDE。我在POJOJava类中创建了web服务。 有人知道如何在web服务java类中获取用户名和密码吗? 我的curl命令类似于: curl-u username:password如果这是基于您的问题中的代码,那么获取用户名就是向资源添加一个新属性,该属性使用类型为@Context
curl-u username:password如果这是基于您的问题中的代码,那么获取用户名就是向资源添加一个新属性,该属性使用类型为
@Context
的注释(我们称之为securityContext
)。然后,您可以按如下方式访问用户名:
String username = securityContext.getUserPrincipal().getName();
但此API无法提供密码。只有当用户已经通过容器的身份验证时,这种方法才会起作用。要获取密码,属性的类型必须是(我们称之为httpHeaders)。使用此对象,您必须调用
String authHeader = httpHeaders.getRequestHeader("Authorization").get(0);
使用您列出的curl命令将默认为使用,在由username:password组成的base64编码字符串中为您提供用户名和密码。要获取这些值,您需要解析、base64解码,然后再次解析。您提供的curl命令将向请求添加以下标头:
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
在我之前提供的代码片段中,authHeader
将具有该值
Basic dXNlcm5hbWU6cGFzc3dvc.mQ=
获取用户名和密码是这样的
String[] pair = base64decode(authHeader.split(" ")[1]).split(":");
在该代码中,使用所选的base64解码库替换base64解码
。在这次调用之后,用户名将在对[0]
中,密码将在对[1]
中。请注意,所有这些代码都缺少生产代码所需的null和边界检查以及异常处理。它还只支持基本身份验证。如果需要支持其他身份验证方法,则需要处理该方法所需的任何解码和解析
在我看来,JAX-RS更倾向于使用SecurityContext
方法并依赖容器来验证请求,因此请理解使用HttpHeaders
方法的所有注意事项