首页 > 解决方案 > 发生错误时如何从后端删除 cookie

问题描述

目前通过如下配置在 Spring Boot 项目中设置 http only cookie。
每当我调用以下端点时,此 cookie 都会正确设置。

  @Bean
  public CookieSerializer defaultCookieSerializer() {
    DefaultCookieSerializer cookie = new DefaultCookieSerializer();
    cookie.setDomainNamePattern(".*");
    cookie.setCookieName("my_cookie");
    cookie.setUseSecureCookie(true);
    cookie.setUseHttpOnlyCookie(true);
    cookie.setCookieMaxAge(1200);
    return cookie;
  }

可以看到,被调用的 cookiemy_cookie被设置了 2 分钟。
在同一项目中的控制器中,我有以下控制器方法。
如果我输入错误块,我希望删除名为my_cookie. 我怎样才能做到这一点?

这是我为此找到的最接近的问题,但考虑到我通过配置设置它,情况并不相同。
https://stackoverflow.com/questions/9821919/delete-cookie-from-a-servlet-response

  @PostMapping(value = "/endpoint")
  public List CustomResponse(
          @RequestBody Request request,
  ) throws Exception {

    CustomResponse response = null;
    if (otherCookie != null) {
        CustomResponse response = // perform some other rest request and get value from there 
    }

    if (response == null) {

        // I want to delete the cookie named `my_cookie` at this stage. 

        throw new CustomException('name');
    }

    return response;
  }

标签: javaspringspring-bootspring-mvccookies

解决方案


要删除 cookie,请将 Max-Age 指令设置为 0 并取消设置它的值。您还必须传递用于设置它的相同的其他 cookie 属性。不要将 Max-Age 指令值设置为 -1。否则,浏览器会将其视为会话 cookie。

// create a cookie
Cookie cookie = new Cookie("username", null);
cookie.setMaxAge(0);
cookie.setSecure(true);
cookie.setHttpOnly(true);
cookie.setPath("/");

//add cookie to response
response.addCookie(cookie);

更多内容请参考 Dzone 的帖子: https ://dzone.com/articles/how-to-use-cookies-in-spring-boot


推荐阅读