请放心,如何在POST请求后从响应主体中提取生成的令牌并将其设置为标头

时间:2017-06-30 20:09:39

标签: java api rest-assured

执行任何请求时,我需要使用正文POST的{​​{1}}请求执行身份验证, 标题{username:"somename", password:"somepass"},它为我提供了生成令牌的响应,我需要将其粘贴为第二个标题,如同Content-Type:application.json一样,以便进一步请求。 请帮帮我吧。

3 个答案:

答案 0 :(得分:1)

对我有用的变体:

String token = given()
                .contentType("application/json")
                .body(new User("someuser" , "123"))
                .when()
                .post(RestConfig.baseUrl+"/authentication-url")
                .then().extract().response().as(TokenResponse.class).getToken();

        given()
                .contentType("application/json")
                .header("Authorization", token)
                .get(RestConfig.baseUrl+"/some-path")
                .then()
                .statusCode(200)...

答案 1 :(得分:0)

我有类似的要求,我必须来回传递身份验证令牌,但这是春季休息模板不放心。为此,我使用了客户端过滤器,它在响应时捕获了令牌,并在请求时将其设置为标头。你可以搜索是否有类似的东西放心,哪些可以完成这项工作。 以下是一个示例https://github.com/rest-assured/rest-assured/wiki/Usage

自定义身份验证

Rest Assured允许您创建自定义身份验证提供程序。您可以通过实现io.restassured.spi.AuthFilter接口(最好)并将其作为过滤器应用。例如,假设你的安全性包括在一个名为“AUTH”的新标题中将两个标题组合在一起(这当然不安全)。然后你就可以这样做(Java 8语法):

given().
        filter((requestSpec, responseSpec, ctx) -> {
            String header1 = requestSpec.getHeaders().getValue("header1");
            String header2 = requestSpec.getHeaders().getValue("header2");
            requestSpec.header("AUTH", header1 + header2);
            return ctx.next(requestSpec, responseSpec);
        }).
when().
        get("/customAuth").
then().
  statusCode(200);

您想要使用AuthFilter而非Filter的原因是在执行given()。auth()。none()时会自动删除AuthFilters。 ...

答案 2 :(得分:0)

我可能误解了这个问题,但是从我得到的问题来看,我认为这样的事情应该有效:

String token =
    given().
            header("Content-Type", "application/json").
            body(/* body content goes here */).
    when().
            post(/* route goes here */).
    then().
            extract().path("token").toString() 
            // the above path arg depends on the response you get from the call.

然后下一个电话会是:

    given().
            header("Content-Type", "application/json").
            header("Authorization", token).
    when()...etc.

某些细节将取决于API,但我一直使用此格式。经常获得用户ID或令牌等的响应,并将其用于将来的呼叫。

有关在保证文档中提取的更多信息:https://github.com/rest-assured/rest-assured/wiki/Usage#extracting-values-from-the-response-after-validation