Spring Boot项目发生异常时如何删除后端配置的HttpOnly Cookie
你可以直接通过操作HttpServletResponse构造匹配属性的过期Cookie实现删除,需保证删除时的Cookie属性和你统一配置的属性完全一致,否则浏览器不会识别删除操作。
实现步骤
- 先在控制器方法的入参中注入
HttpServletResponse对象 - 在需要删除Cookie的位置构造同名Cookie,设置有效期为0,其余属性和你配置的
my_cookie属性完全匹配后添加到响应中
完整代码示例
@PostMapping(value = "/endpoint") public List CustomResponse( @RequestBody Request request, HttpServletResponse response // 注入响应对象 ) throws Exception { CustomResponse customResponse = null; if (otherCookie != null) { customResponse = // perform some other rest request and get value from there } if (customResponse == null) { // 构造删除用的Cookie,所有属性和你配置的保持一致 Cookie removeCookie = new Cookie("my_cookie", null); removeCookie.setMaxAge(0); // 立即过期 removeCookie.setPath("/"); // 和Cookie实际生效路径一致,默认Spring配置的Cookie路径为根路径 removeCookie.setHttpOnly(true); // 匹配你配置的HttpOnly属性 removeCookie.setSecure(true); // 匹配你配置的Secure属性,本地http测试时可临时设为false // 如果有配置固定域名,这里也要设置和生成时一致的域名:removeCookie.setDomain("你的域名") response.addCookie(removeCookie); throw new CustomException("name"); } return customResponse; }
注意事项
- 必须保证删除Cookie时的
HttpOnly、Secure、Path、Domain属性和初始生成Cookie的配置完全一致,否则浏览器会认为是两个不同的Cookie,不会执行删除操作 - 若你使用了Spring Session,也可以调用
request.getSession().invalidate()直接销毁会话,框架会自动帮你清除对应的Session Cookie,不需要手动构造Cookie
内容的提问来源于stack exchange,提问作者stacky
相关产品推荐
相关产品推荐

