【问题标题】:Get parameter from curl command in REST web serivce从 REST Web 服务中的 curl 命令获取参数
【发布时间】:2011-08-18 04:02:27
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    如果这是基于您的问题here 中的代码,那么获取用户名只需将新属性添加到使用@Context 注释的javax.ws.rs.core.SecurityContext 类型的资源(我们称之为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 编码字符串中为您提供用户名和密码。要获得这些值,您需要解析、base64 解码并再次解析。您提供的 curl 命令会将以下标头添加到请求中:

    Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
    

    在我之前提供的代码 sn-p 中,authHeader 将具有值

    Basic dXNlcm5hbWU6cGFzc3dvc.mQ=
    

    获取用户名和密码是这样的

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

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

    在我看来,JAX-RS 更倾向于使用 SecurityContext 方法并依赖容器来验证请求,因此请了解使用 HttpHeaders 方法的所有注意事项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-10
      • 2013-09-16
      • 1970-01-01
      • 2023-03-21
      • 2011-04-22
      • 2011-09-05
      • 1970-01-01
      相关资源
      最近更新 更多