Фильтр случайным образом не считывает заголовок cookie, если не добавляются журналыJAVA

Программисты JAVA общаются здесь
Anonymous
Фильтр случайным образом не считывает заголовок cookie, если не добавляются журналы

Сообщение Anonymous »

Я работаю над приложением Spring Boot + Angular, где сталкиваюсь с странной проблемой, связанной с файлами cookie и фильтрами.

Код: Выделить всё

CookieValidationFilter
) В весенней загрузке, которая проверяет для SessionCookie в заголовке cookie .

[*] Из углового фронта В: < /p> [*] Однако, если я добавляю несколько операторов журнала отладки в фильтр, например, заголовки печати, проблема исчезла, и она начинает работать, как и ожидалось. Никаких изменений в конфигурации переднего, заднего или браузера, просто наличие журнала, кажется, не изменяет поведение.

[*] Правильно установлен фронт-энд, и я могу видеть его в инструментах Dev Browser под накладкой «Cookies». На вкладке «Сеть» не показывает заголовок cookie . Безопасный; SameSite = none .


Мой код такой, как ниже:

Код: Выделить всё

ContentCachingRequestFilter
:

Код: Выделить всё

@Component
public class ContentCachingRequestFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
ContentCachingRequestWrapper requestWrapper = new ContentCachingRequestWrapper((HttpServletRequest) servletRequest);
filterChain.doFilter(requestWrapper, servletResponse);
}
}
< /code>
CookieValidationFilter
(упрощенное):

Код: Выделить всё

@Component
public class CookieValidationFilter extends OncePerRequestFilter {

private final ObjectMapper objectMapper;

public CookieValidationFilter(ObjectMapper objectMapper) {
this.objectMapper = objectMapper;
}

@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {

String cookieHeader = request.getHeader(HttpHeaders.COOKIE);
boolean hasSessionCookie = cookieHeader != null && Arrays.stream(cookieHeader.split(";"))
.map(String::trim)
.anyMatch(c -> c.startsWith("SessionCookie=") && !c.equalsIgnoreCase("SessionCookie="));

if (!hasSessionCookie) {
ApiResponse apiResponse = ApiResponse.builder().httpStatus(Constants.UNAUTHORISED_ACCESS_CODE)
.statusMessage(Constants.UNAUTHORIZED_MSG)
.userMessage(Constants.YOU_ARE_NOT_AUTHORIZED_TO_ACCESS_THE_FEATURE_MSG).errorMessage(null)
.data(null).messageSeverity(null).validationErrors(null).build();

response.setStatus(Constants.UNAUTHORISED_ACCESS_CODE);
response.setContentType("application/json");
response.getWriter().write(objectMapper.writeValueAsString(apiResponse));
return;
}

filterChain.doFilter(request, response);
}
}
< /code>
Why would accessing or logging headers (e.g., with request.getHeaderNames()
) влиять на то, получает ли заголовок cookie бэкэнд в пружине? Collections.list (request.getheadernames ()). Foreach (request :: getheader)
[*] Расширенное OnePerquestFilter для ContentCachingRequestFilter
[*] Обеспечение правильной настройки CORS (

Код: Выделить всё

allowCredentials(true)
, точное происхождение)
[*] Обеспечение использования фронтальных средств: true
[*] cookie отправляется с samesite = none; Безопасный; Httponly < /code> < /li>
< /ul>
Тем не менее, поведение противоречиво, если не добавлено ведение журнала отладки, что не имеет смысла. < /P>
: < /h3>
  • < /br />

    < / /li>


    < /br /li>


    < /br /li>


    Встроенный
  • Работаю локально с помощью HTTPS включена
Любые идеи, почему это происходит или как обеспечить постоянную обработку cookie в пользовательских фильтрах, не полагаясь на журналы отладки?


Подробнее здесь: https://stackoverflow.com/questions/796 ... -are-added

Вернуться в «JAVA»