Ali*_*yon 1 rest spring spring-mvc resttemplate
我正在尝试使用spring rest模板来发布登录请求.
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);
Run Code Online (Sandbox Code Playgroud)
一切顺利,但当我尝试发送第二个请求时,它会生成错误说:
业务经理在15分钟后关闭您的会话
我该怎么做才能解决这个问题?
当您在第一次请求中收到回复时,您应该存储session id通过cookie 收到的回复.您将在set-cookie响应标题中检索它,您可以通过以下方式获取:
//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);
Run Code Online (Sandbox Code Playgroud)
然后在每个后续请求中,您应该Cookie使用第一个请求中收到的值设置请求标头:
//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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10193 次 |
| 最近记录: |