获取和设置会话的值

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 的会话属性 userIdaccess-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

中获取它