Перенаправление перестало работать через некоторое время на производстве - PullRequest
0 голосов
/ 08 октября 2018

Я столкнулся с очень странной проблемой только на Производственном сервере.

Я использую SAP Hybris , который использует Spring security .

Когда пользователь пытается получить доступ к любому безопасному URL-адресу сайта, он получаетперенаправляется на страницу входа, после входа в систему он перенаправляет обратно на URL-адрес, к которому он пытался получить доступ ранееЭто ожидаемое поведение.

Теперь на производственных узлах магазина некоторое время все работает нормально (скажем, около 30 минут), когда я перезагружаю сервер.И тогда это перестало работать.После входа в систему пользователь перенаправляет на домашнюю страницу вместо защищенного URL-адреса, к которому он пытался получить доступ.

Примечание: Он работает абсолютно нормально во всех нижних средах (Local, DEV, Stage и т. Д.).

Есть идеи?Буду признателен за вашу помощь !!


Редактировать: - Эта проблема возникает, даже если я напрямую получаю доступ к своему узлу приложения (серверу Tomcat) с помощью IP-адреса, так что я не думаю, что этосвязанные с LB / сервером кэша / веб-сервером / любым параметром кластера.

1 Ответ

0 голосов
/ 07 марта 2019

Прошло много времени, поэтому я забыл точную причину проблемы.Я думаю, что мне удалось восстановить его в моем локальном и исправить это путем переопределения forceDefaultTargetUrlBySession метод StorefrontAuthenticationSuccessHandler.Вот мой верный код.

protected void forceDefaultTargetUrlBySession(final HttpServletRequest request, final HttpServletResponse response)
{
    //if redirected from some specific url, need to remove the cachedRequest to force use defaultTargetUrl
    final RequestCache requestCache = new HttpSessionRequestCache();
    final SavedRequest savedRequest = requestCache.getRequest(request, response);

    if (savedRequest != null)
    {
        if (savedRequest.getRedirectUrl() != null && StringUtils.contains(savedRequest.getRedirectUrl(), PASSWORD_UPDATE_PAGE_PATH))
        {
            requestCache.removeRequest(request, response);
        }
    }
}
...