JSF 2 - постоянное перенаправление (301)

Я пытаюсь реализовать перенаправление 301 изнутри JSF, но когда я его запускаю, я всегда вижу, как выполняется 302. Кто-нибудь сможет показать мне, как изменить метод ниже, чтобы выполнить 301?

/**
 * Redirect to specified destination url
 *
 * @param destination
 */
public static void permanentRedirect(String destination) {
    final ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();

    try {
        HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
        response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);

        if (!response.isCommitted()) {
            externalContext.redirect(destination);
        }
    } catch (IOException e) {
        LOGGER.debug("Could not redirect to " + destination);
    }
} 

1 ответ

Решение

Вы не должны ссылаться externalContext.redirect(destination), Это переопределит статус на 302. Вы должны вручную установить Location заголовок и заполните ответ.

externalContext.setResponseStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
externalContext.setResponseHeader("Location", destination);
facesContext.responseComplete();
Другие вопросы по тегам