Search code examples
springrestspring-mvcresttemplate

Session closed error when performing subsequence requests to client via Spring RestTemplate


I'm trying to use spring rest template to do a post request to login in.

RestTemplate restTemplate = new RestTemplate();

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);

LinkedMultiValueMap<String, Object> mvm = new LinkedMultiValueMap<String, Object>();
mvm.add("LoginForm_Login", "login");
mvm.add("LoginForm_Password", "password");

ResponseEntity<String> result = restTemplate.exchange(uriDWLogin, HttpMethod.POST, requestEntity, String.class);

all goes well, but when I try to send a second request, It generates an error saying :

Business Manager closes your session after 15 minutes

What can I do to solve this problem ?!


Solution

  • When you receive the response in your first request you should store your session id which is received via cookie. You will retrieve it in a set-cookie response header which you can get via:

    //first request
    RestTemplate template = new RestTemplate();
    ResponseEntity<String> forEntity = template.getForEntity("http://google.bg", String.class);
    forEntity.getHeaders().get("Set-Cookie").stream().forEach(System.out::println);
    

    then in every subsequent request you should set the Cookie request header with the values received in the first request:

    //subsequent request
    RestTemplate restTemplate = new RestTemplate();
    HttpHeaders headers = new HttpHeaders();
    headers.set("Cookie",cookies.stream().collect(Collectors.joining(";")));
    HttpEntity<String> entity = new HttpEntity<String>(headers);
    restTemplate.exchange("http://url", HttpMethod.POST, entity, String.class);