【问题标题】:Spring Boot TestRestTemplate: Pass along session idSpring Boot TestRestTemplate:传递会话 ID
【发布时间】:2018-04-15 17:32:50
【问题描述】:

我有一个带有一些测试的 Spring Boot 应用程序。应用程序的“快乐路径”要求用户发送请求以启动会话,然后它可以向其他服务发出其他请求。

我正在尝试测试这些其他服务,但我需要先启动一个会话。我的心态是这样的:

  1. 点击会话开始端点
  2. 从该请求中获取会话 cookie
  3. 在测试期间发出的未来请求中添加该 cookie。

为了实现这一点,我搞砸了:

    String s = t.postForEntity(loginUrl, remoteSessionPacket, String.class)
            .getHeaders()
            .get("Set-Cookie").get(0);
    String[] split = s.split(";");
    String sessionId = "";
    for (String s1 : split) {
        if(s1.contains("SESSION"))
        {
            sessionId = s1;
        }
    }
    HttpHeaders headers = new HttpHeaders();
    headers.add("SESSION", sessionId);
    HttpEntity<?> httpEntity = new HttpEntity<>(headers);

    RemoteDTOPacket= new RemoteDTOPacket();
    packet.Token = UUID.randomUUID().toString();
    String url = "http://localhost:" + port + "/domain/SomeFunction";
    ResponseEntity<ResponsePacket> response = t.postForEntity(url, packet, ResponsePacket.class, httpEntity);
    Assert.assertEquals(0, (long) response.getBody().count);

显然,这是行不通的,并且会抛出错误。

有人知道如何完成我想做的事情吗?

非常感谢任何帮助。

【问题讨论】:

    标签: java spring session spring-boot cookies


    【解决方案1】:

    会话 id 存储在 cookie 中,该 cookie 存储在“Cookie”标头中 - 而不是单独的请求标头中。像这样的东西应该可以工作:

        List<String> coockies = t.postForEntity(loginUrl, remoteSessionPacket, String.class)
                .getHeaders()
                .get("Set-Cookie");
    
        HttpHeaders requestHeaders = new HttpHeaders();
        requestHeaders.put(HttpHeaders.COOKIE, coockies);
        HttpEntity<Void> requestEntity = new HttpEntity<>(requestHeaders);
    

    或者您可以获取最有可能存储在“JSESSIONID”键下的确切会话 ID cookie。

    【讨论】:

      猜你喜欢
      • 2017-05-24
      • 2017-07-11
      • 2016-12-21
      • 1970-01-01
      • 1970-01-01
      • 2011-11-20
      • 1970-01-01
      • 1970-01-01
      • 2014-01-28
      相关资源
      最近更新 更多