我想将用户重定向到更改密码页面,只要他们没有更改密码。可以从SessionScoped Bean获得此状态。
如何全局修改所有链接和结果,以便将需要更改密码的用户重定向到更改密码页?
即使他们尝试通过网址访问网页,这也应该有用。
这可以通过JSF实现吗?
谢谢!
答案 0 :(得分:1)
您通常应该使用ServletFilter
。您可以访问ManagedBean
,HttpSession
。
答案 1 :(得分: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;
}
}
在faces-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>