2017-11-03 17 views
1

いくつかのテストでSpring Bootアプリケーションがあります。アプリケーションの「ハッピー・パス」では、ユーザーがセッションを開始する要求を送信し、次に他のサービスに他の要求を行うことが要求されます。Spring Boot TestRestTemplate:セッションIDを渡す

私はこれらの他のサービスをテストしようとしていますが、最初にセッションを開始する必要があります。

  1. はその要求からテストの間に作られた将来の要求にクッキー
  2. スラップをセッションクッキーを取得するセッション開始エンドポイント
  3. ヒット:次のように私の考え方でした。

それを達成するために、私はこの混乱持っている:明らか

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

を、これは動作しないとエラーが放棄でスローされます。

誰も私がやろうとしていることを達成する方法を知っていますか?

ご協力いただきまして誠にありがとうございます。

答えて

1

セッションIDは、「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クッキーを取得することができます。

関連する問題