JSF 2.2: PhaseListener должен запускаться только перед первым запросом сеанса.

Я работаю над PhaseListener, который запускается до RESTORE_VIEW, и мне нужно знать, запускается ли он в первый раз в текущем сеансе или нет (чтобы я мог выполнить автоматический вход в систему для остающихся в системе пользователей).

Любые подсказки для меня?


person mpunktw    schedule 16.04.2014    source источник


Ответы (1)


Да, вы можете сделать такую ​​вещь. У меня есть тот же слушатель фазы:

@Override
public PhaseId getPhaseId() {
    return PhaseId.RESTORE_VIEW;
}

@Override
public void beforePhase(PhaseEvent event) {
    FacesContext ctx = FacesContext.getCurrentInstance();
    if (!ctx.isPostback()) {
    authRet = // check for active session
    if (!authRet) {
         if (...)// check for cookies { //create auth}
         else { // redirect to login }
    }
}
person Tushee    schedule 17.04.2014
comment
В данный момент я создаю бесконечный цикл: !postback приводит к перенаправлению, которое снова является !postback, что приводит к перенаправлению того, что снова !postback ... Итак, как вы получаете authRet? Например, проверить, есть ли в сеансе действительный пользователь? - person mpunktw; 17.04.2014
comment
Хорошо, это все. Теперь мое состояние выглядит следующим образом: if (!ctx.potsback() && loginController != null && loginController.getCurrentUser() != null)... - person mpunktw; 17.04.2014
comment
Я обычно проверяю, является ли URL-адрес запроса URL-адресом входа для такого рода проблем. Если ответ сработал для вас, пожалуйста, примите его как правильный ответ. Спасибо! - person Tushee; 18.04.2014
comment
Большое спасибо! Да, это так! - person mpunktw; 18.04.2014