Cookie, установленный в другом сервлете, не задается в запросе к другому сервлету того же приложения

#java #jsf #servlets #cookies #servlet-filters

#java #jsf #сервлеты #файлы cookie #сервлет-фильтры

Вопрос:

у меня есть приложение ear, развернутое на сервере JBOSS 8. Внешняя часть представляет собой приложение JSF. Во внешнем интерфейсе.война Я определил два сервлета:

  1. Сервлет JSF 2.2 для моего графического интерфейса выполняется локально на 127.0.0.1:8080 /app
  2. MockAuthenticationServlet, выполняется локально на 127.0.0.1:8080/app/auth

MockAuthenticationServlet просто устанавливает cookie (тестовый cookie) следующим образом:

 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    Cookie cookie = new Cookie(COOKIE_NAME, "12345");
    cookie.setPath("/");
    resp.addCookie(cookie);
    resp.sendRedirect("/app");
}
 

Вот метод из ServletFilter, который вызывается из doFiter:

 private Cookie getCookie(HttpServletRequest request) {
    if (request.getCookies() != null) {
        for (Cookie c : request.getCookies()) {
            if (c.getName().equals(COOKIE_NAME)) {
                return c;
            }
        }
    }

    return (Cookie) request.getAttribute(COOKIE_NAME);
}
 

Последний возврат был только для случая, когда он отправляется как атрибут. Предполагается, что cookie-файл возвращается из цикла.

Я отладил MockAuthenticationServlet, и файл cookie устанавливается, я также вижу его, когда открываю список файлов cookie браузера. Однако в моем ServletFilter, где я хочу проверить, установлен ли этот файл cookie, список файлов cookie в запросе равен null. Я что-то упустил? Спасибо за ваши советы.

Комментарии:

1. опубликуйте код фильтра сервлета и проверяете ли вы после установки cookie или до него

2. Я добавил метод filter, который получает файл cookie. Фильтр проверяет каждый запрос, который отправляется в /javax.faces.resource . План состоит в том, чтобы перенаправить на MockAuthenticationServlet, если cookie не установлен. Как только он установлен из MockAuthenticationServlet, он должен быть перенаправлен обратно. Опять же, я должен сказать, что я вижу файл cookie в браузере, но в коде Java при отладке он пуст. Домен тот же 127.0.0.1, изменен только контекстный путь.

3. Используйте плагин для браузера, чтобы определить, действительно ли cookie отправляется на сервер или нет. Если это так, укажите полный набор HTTP-заголовков в вашем вопросе.