java - Spring Boot测试RestTemplate : Pass along session id

标签 java spring session spring-boot cookies

我有一个带有一些测试的 Spring Boot 应用程序。应用程序的“happy-path”要求用户发送请求来启动 session ,然后它可以向其他服务发出其他请求。

我正在尝试测试这些其他服务,但我需要先启动一个 session 。我的心态如下:

  1. 点击 session 开始端点
  2. 从该请求获取 session Cookie
  3. 将该 Cookie 应用于测试期间发出的 future 请求。

为了实现这一目标,我遇到了麻烦:

    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);

显然,这不起作用,并且会随意抛出错误。

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

非常感谢任何帮助。

最佳答案

session ID 存储在 cookie 中,该 cookie 存储在“Cookie” header 中,而不是单独的请求 header 中。像这样的东西应该有效:

    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);

或者您可以获得准确的 session ID cookie,该 cookie 最有可能存储在“JSESSIONID”键下。

关于java - Spring Boot测试RestTemplate : Pass along session id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47088071/

相关文章:

java - postgresql 中的 JdbcTemplate 批量更新 - 日期丢失时间?

node.js - saveUninitialized 和重新保存有什么区别?

c# - 创建交互式登录 session

Java 接口(interface) : Inheriting, 覆盖和重载方法

java - 从 JDeveloper 11.1.2.4 迁移我的应用程序后,JDeveloper 12c 出现导航错误

java - JSTL URL 标签在 Heroku 上不起作用

java - 使用 Gson 反序列化对象 Json 列表

Spring security DefaultHttpFirewall - requestURI 不能包含编码的斜杠

java - 侦探未向 Zipkin 发送跟踪信息

java - 如何根据用户数据的一些哈希生成自定义 JSESSIONID 以复制 session