У меня есть веб-сайт, который при входе пользователя в систему создает токен доступа, который хранится в памяти, и токен обновления, который хранится в файле cookie HttpOnly. Когда пользователь выходит из системы, я хочу удалить файл cookie HttpOnly. однако, поскольку это HttpOnly, я не могу сделать это с помощью JavaScript, поэтому вместо этого я планирую отправить еще один файл cookie с сервера, срок действия которого истек, и перезаписать действующий файл cookie. К сожалению, по каким-то причинам это не работает.
Вот как я создаю cookie в первую очередь:
String refreshToken = issueRefreshToken(username);
long currentDate = Calendar.getInstance().getTimeInMillis();
Date expDate = new Date(currentDate + 60 * 24 * 7 * ONE_MINUTE_IN_MILLIS);
NewCookie newCookie = new NewCookie("RefreshCookie",
refreshToken,
"/",
null,
NewCookie.DEFAULT_VERSION,
"Comment",
60 * 60 * 24 * 7,
expDate,
false,
true);
// Return the token on the response
return Response.ok(accessToken).cookie(newCookie).header("Access-Control-Allow-Credentials", true).build();
Это работает по назначению и создает файл cookie обновления, действительный в течение одной недели.
У меня есть другая конечная точка (/ logout), которая создает еще один файл cookie, который должен перезаписать первый.
@POST
public Response logout(){
NewCookie logoutCookie = new NewCookie(
"RefreshCookie",
null,
"/",
null,
NewCookie.DEFAULT_VERSION,
"",
0,
new Date(),
false,
true);
return Response.ok().cookie(logoutCookie).header("Access-Control-Allow-Credentials", true).build();
}
Этот файл cookie даже не сохраняется во внешнем интерфейсе, если первый клиент не установлен. Я попытался отправить его из подпути, в котором установлен первый файл cookie, но безуспешно. Что-то мне здесь не хватает? Это неправильный способ сделать это?