#quarkus
Вопрос:
В настоящее время я разрабатываю приложение с помощью Quarkus usig для аутентификации в форме http. После прочтения страницы «Аутентификация на основе форм» (https://quarkus.io/guides/security-built-in-authentication) Я столкнулся с проблемой на этапе выхода из системы. В документации не упоминается ни одна возможность выхода из текущего сеанса.
Поскольку Кваркус внутренне использует Vert.x, я попробовал следующее:
@Path("/auth")
public class AuthController {
@LoggerName("AuthController")
Logger log;
@ConfigProperty(name = "quarkus.http.auth.form.cookie-name")
String COOKIE_NAME;
@ConfigProperty(name = "quarkus.http.auth.form.location-cookie")
String REDIRECT_COOKIE_NAME;
@ConfigProperty(name = "quarkus.http.auth.form.login-page")
String LOGIN_PAGE;
@GET
@Path("/logout")
public void logout(@Context RoutingContext ctx) {
var c1 = ctx.removeCookie(COOKIE_NAME);
var c2 = ctx.removeCookie(REDIRECT_COOKIE_NAME);
log.info(String.format("c1 = %s, c2 = %s", c1.getName(), c2.getName()));
ctx.redirect(LOGIN_PAGE);
}
}
Это работает не так, как ожидалось. В log.info хорошо регистрируется ( [AuthController] (executor-thread-0) c1 = MyCookieName, c2 = quarkus-redirect-location
), и перенаправление работает нормально. Однако сеанс продолжается.
Как я могу это исправить ?
Спасибо за помощь,
Ответ №1:
После нескольких исследований и попыток я нашел решение, которое заключается в том, чтобы сделать файл cookie недействительным с помощью Javascript с помощью:
document.cookie = "MyCookieName=; Max-Age=0";
Это приведет к аннулированию файла cookie и перенаправлению на страницу входа в систему.