获取并设置会话值

时间:2019-05-11 08:42:46

标签: java spring spring-boot servlets resttemplate

在Java中,尤其是Spring Boot中,如何通过使用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的值时,它始终显示为null。

@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);
}

1 个答案:

答案 0 :(得分:0)

尽管我从未在RestTemplate中使用postForObject方法,但我可以在他们的文档(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 Parameters表单,则必须遵循我上面粘贴的链接中的4.4,

https://www.baeldung.com/rest-template

通过这种方式,如果您为userId包含键值对,则可以在demo2.com中获取它