获取和设置会话的值
Get and set value of session
在 java 中,尤其是 spring 引导如何使用 RestTemplate 通过调用 Api 从域 B 获取或设置域 A 的会话值?
域 B 中的示例我使用 RestTemplate postForObject
从域 demo2.com 调用 Api:
public ResponseEntity<String> doLogout(@RequestBody String userId){
System.out.println("123" + userId);
RestTemplate rest = new RestTemplate();
for(String s : listUrl) {
System.out.println("url: " + s);
rest.postForObject("http://demo2.com"+"/doLogout", userId, String.class);
}
return new ResponseEntity<String>(HttpStatus.OK);
}
在demo2.com,这是我的Api。但是当我打印 demo2.com 的会话属性 userId
和 access-token
的值时,它总是显示为空。
@RequestMapping(value = "/doLogout", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<String> doLogout(HttpServletRequest request, @RequestBody String userId){
System.out.println("abc" + SessionUtil.getAttribute(request, "access-token") + SessionUtil.getAttribute(request, "userId"));
if(userId.equals(SessionUtil.getAttribute(request, "userId"))) {
System.out.println("vao day");
SessionUtil.setAtribute(request, "access-token", null);
}
return new ResponseEntity<String>(HttpStatus.OK);
}
虽然我从未将 postForObject 方法与 RestTemplate 一起使用,但我可以在他们的文档 (https://www.baeldung.com/rest-template) 中看到您必须将 Post 参数包装在 HttpEntity 对象中。
因此,在你那里,我会按照他们的建议尝试,
ClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
RestTemplate restTemplate = new RestTemplate(requestFactory);
HttpEntity<String> request = new HttpEntity<>(new String("<user_id_value>"));
String userId = restTemplate.postForObject("http://demo2.com"+"/doLogout", request, String.class);
System.out.println("User ID : " + userId);
但是,postForObject 用于创建随后将被返回的资源。如果您想提交一个带有 Post 参数的表单,您将根据需要指定和命名参数,那么您必须遵循我上面粘贴的 link 中的 4.4,
https://www.baeldung.com/rest-template
这样,如果您为 userId 添加 key-value 对,您将能够在 demo2.com
中获取它
在 java 中,尤其是 spring 引导如何使用 RestTemplate 通过调用 Api 从域 B 获取或设置域 A 的会话值?
域 B 中的示例我使用 RestTemplate postForObject
从域 demo2.com 调用 Api:
public ResponseEntity<String> doLogout(@RequestBody String userId){
System.out.println("123" + userId);
RestTemplate rest = new RestTemplate();
for(String s : listUrl) {
System.out.println("url: " + s);
rest.postForObject("http://demo2.com"+"/doLogout", userId, String.class);
}
return new ResponseEntity<String>(HttpStatus.OK);
}
在demo2.com,这是我的Api。但是当我打印 demo2.com 的会话属性 userId
和 access-token
的值时,它总是显示为空。
@RequestMapping(value = "/doLogout", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<String> doLogout(HttpServletRequest request, @RequestBody String userId){
System.out.println("abc" + SessionUtil.getAttribute(request, "access-token") + SessionUtil.getAttribute(request, "userId"));
if(userId.equals(SessionUtil.getAttribute(request, "userId"))) {
System.out.println("vao day");
SessionUtil.setAtribute(request, "access-token", null);
}
return new ResponseEntity<String>(HttpStatus.OK);
}
虽然我从未将 postForObject 方法与 RestTemplate 一起使用,但我可以在他们的文档 (https://www.baeldung.com/rest-template) 中看到您必须将 Post 参数包装在 HttpEntity 对象中。
因此,在你那里,我会按照他们的建议尝试,
ClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
RestTemplate restTemplate = new RestTemplate(requestFactory);
HttpEntity<String> request = new HttpEntity<>(new String("<user_id_value>"));
String userId = restTemplate.postForObject("http://demo2.com"+"/doLogout", request, String.class);
System.out.println("User ID : " + userId);
但是,postForObject 用于创建随后将被返回的资源。如果您想提交一个带有 Post 参数的表单,您将根据需要指定和命名参数,那么您必须遵循我上面粘贴的 link 中的 4.4,
https://www.baeldung.com/rest-template
这样,如果您为 userId 添加 key-value 对,您将能够在 demo2.com
中获取它