gpt4 book ai didi

java - Spring :Inserting cookies in a REST call response

转载 作者:IT老高 更新时间:2023-10-28 13:47:43 25 4
gpt4 key购买 nike

我正在使用 spring mvc 实现 REST API 端点。我正在尝试发回带有 cookie 值的 HTTP 响应。这相当于我在 ruby​​ SINATRA 中需要做的事情:

  response.set_cookie('heroku-nav-data', :value => params['nav-data'], :path => '/')

这是我迄今为止尝试过的,但没有奏效:

@RequestMapping(value = "/login", method = RequestMethod.POST)
public ResponseEntity<String> single_sign_on(@RequestBody String body_sso) {

String[] tokens = body_sso.split("&");
String nav_data=tokens[3].substring(9);
String id = tokens[2].substring(3);
String time_param = tokens[0].substring(10);
long timestamp= Long.valueOf(time_param).longValue();

String pre_token = id+':'+HEROKU_SSO_SALT+':'+time_param;
String token = DigestUtils.shaHex(pre_token);
long lDateTime = new Date().getTime()/1000;
if (!((token.equals(tokens[4].substring(6))) && ((lDateTime-timestamp)<300)))
{
return new ResponseEntity<String>(HttpStatus.FORBIDDEN);
}

HttpHeaders headers = new HttpHeaders();
headers.add("heroku-nav-data",nav_data);// this didn't work
return new ResponseEntity<String>(id,headers,HttpStatus.OK);

}

我该怎么办?谢谢。

最佳答案

虽然可以使用原始 Set-Cookie header 设置 cookie,但使用 Servlet API 会更容易:

在你的 Controller 方法中添加HttpServletResponse参数,Spring会传递相关实例;然后使用 addCookie 方法:

@RequestMapping(value = "/login", method = RequestMethod.POST)
public ResponseEntity<String> singleSignOn(@RequestBody String bodySso, HttpServletResponse response) {

response.addCookie(new Cookie("heroku-nav-data", navData));
return new ResponseEntity<String>(id,headers,HttpStatus.OK);

}

如果需要,您还可以向 cookie 对象添加更多参数:

final Cookie cookie = new Cookie(this.cookieName, principal.getSignedJWT());
cookie.setDomain(this.cookieDomain);
cookie.setSecure(this.sendSecureCookie);
cookie.setHttpOnly(true);
cookie.setMaxAge(maxAge);
response.addCookie(cookie);

关于java - Spring :Inserting cookies in a REST call response,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24642508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com