2017-11-03 4 views
1

몇 가지 테스트와 함께 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는 별도의 요청 헤더가 아닌 "쿠키"헤더에 저장된 쿠키에 저장됩니다.

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 쿠키를 얻을 수 있습니다 : 이런 식으로 뭔가 작업을해야합니다.

관련 문제