2014-02-21 2 views
0

Я хочу перенаправить своих пользователей на страницу с паролем изменения, если они не изменили свой пароль. Это состояние доступно из SessionScoped Bean.Как перенаправить все запросы в JSF на одну страницу?

Как я могу глобально изменить все ссылки и результаты, чтобы пользователь, которому нужно изменить свой пароль, перенаправляется на страницу смены пароля?

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

Можно ли это сделать с помощью JSF?

Спасибо!

+3

сервлет фильтр приходит на ум. Основной материал сервлета, который вы знаете, JSF не имеет к этому никакого отношения. – Gimby

+0

См. Пример 'ServletFilter' [здесь] (http://stackoverflow.com/questions/21440904/how-to-call-bean-method-on-every-page-request/21471739#21471739) –

ответ

1

Возможно, вы можете достичь этого с помощью фазовых прослушивателей. Например:

public class MyPhaseListener implements PhaseListener { 

    @Override 
    public void afterPhase(PhaseEvent event) { 
     System.out.println("afterPhase with ID : " + event.getPhaseId()); 
    } 

    @Override 
    public void beforePhase(PhaseEvent event) { 
     // Do not exceute subsequent phases if sending a redirect 
     event.getFacesContext().responseComplete(); 
     try { 
      ((HttpServletResponse)event.getFacesContext().getExternalContext().getResponse()).sendRedirect("http://stackoverflow.com"); 
     } catch (IOException ex) { 
      Logger.getLogger(MyPhaseListener.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

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

Регистрация слушателя в лицах-config.xml

<faces-config version="2.2" 
       xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"> 
    <lifecycle> 
     <phase-listener>MyPhaseListener</phase-listener> 
    </lifecycle> 

</faces-config> 
+1

Вы можете увидеть здесь http : //stackoverflow.com/a/2633733/1126380, как получить сеансовый компонент, чтобы проверить, изменил ли пользователь пароль. –

1

Для этого вы должны использовать ServletFilter. Вы можете получить доступ к своему ManagedBean, так как он доступен в HttpSession.

Смежные вопросы