首先我前端发请求使用的是JQ的ajax,ajax默认是不带上cookie的,所以需要手动设置一下
$.ajax({
xhrFields: {
withCredentials: true
},
...
...
}
其次后端需要对请求体和响应体做处理
首先是允许携带cookie
response.setHeader("Access-Control-Allow-Credentials", "true");
然后就是跨域问题,虽然控制器有@CrossOrigin注解默认处理跨域,但是不够具体,所以还需要单独在方法里设置
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
最后附上简单使用的代码
设置cookie
@RestController
@CrossOrigin("*")
public class LiebiaoController {
@GetMapping("/test1")
public void test1(String username, String password,HttpServletResponse response,HttpServletRequest request) {
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
// 创建cookie并设置kv对
Cookie cookie = new Cookie("key","value");
cookie.setMaxAge(60*60*24); // 设置存活时间
// 给响应体添加上cookie
response.addCookie(cookie);
}
}
获取cookie
@RestController
@CrossOrigin("*")
public class LiebiaoController {
@GetMapping("/test2")
public void test2(HttpServletRequest request,HttpServletResponse response) {
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
Cookie[] cookies = request.getCookies();
// 判空处理
if (cookies == null) {
}else {
for (Cookie cookie : cookies) {
// 根据cookie的key获取到对应的cookie
if ("key".equals(cookie.getName())) {
...
...
}
}
}
}
}
修改cookie直接重复添加覆盖原有的cookie即可,需要注意给响应体添加修改后的cookie
Cookie cookie = new Cookie("key","465");
response.addCookie(cookie);
删除cookie,如果已经拿到原有cookie就直接设置该cookie的存活时间为0,然后给响应体添加该cookie
// key值一定要对应,value值随意
Cookie cookie = 假定这里就是获取原有的cookie
cookie.setMaxAge(0); // 设置为存活时间
response.addCookie(cookie);
如果不去拿原有cookie就可以通过新建一个key值一样,value随意的cookie,来达到覆盖效果,然后设置存活时间为0,就能秒死掉,以达到删除的效果
Cookie cookie = new Cookie("key",null);
cookie.setMaxAge(0); // 设置为存活时间
response.addCookie(cookie);