春天:在REST调用响应中插入cookie [英] Spring :Inserting cookies in a REST call response

查看:417
本文介绍了春天:在REST调用响应中插入cookie的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am implementing REST API endpoints using spring mvc. I am trying to send back a HTTP response with a cookie value. This is the equivalent of what I need to do in ruby SINATRA :

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

这是我到目前为止尝试过的,但是没有用:

This is what I have tried so far, but that didn't work :

@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标头设置cookie,但使用Servlet API会更容易:

While it is possible to set a cookie using a raw Set-Cookie header, it will be easier to use the Servlet API :

HttpServletResponse参数添加到您的控制器方法中,Spring将传递相关实例;然后使用addCookie方法:

Add the HttpServletResponse parameter to your controller method, Spring will pass the relevant instance; then use the addCookie method :

@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对象添加更多参数:

You can also add more parameters to the cookie object if needed:

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

这篇关于春天:在REST调用响应中插入cookie的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆