首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >handleNavigation在PhaseListener中不起作用

handleNavigation在PhaseListener中不起作用
EN

Stack Overflow用户
提问于 2013-04-24 20:25:17
回答 1查看 1.8K关注 0票数 0

我有一个PhaseListener来控制用户访问一些页面,如果用户没有登录,他被重定向到登录页面。

问题是我的方法handleNavigation没有重定向用户。它会运行,但不会重定向用户。

当用户键入不应具有访问权限的url时,该方法将运行,但页面将打开,而不会重定向到登录页面。

怎么啦?

代码语言:javascript
复制
public class AuthorizationListener implements PhaseListener {

  public void afterPhase(PhaseEvent event) {

    FacesContext facesContext = event.getFacesContext();
    String currentPage = facesContext.getViewRoot().getViewId();

    boolean isLoginPage = (currentPage.lastIndexOf("login.xhtml") > -1);
    if(isLoginPage)
      return;

    if(currentPage.indexOf("/rws/") != -1)
    {
      HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(true);
      Object currentUser = session.getAttribute("usuario");

      if (!isLoginPage && currentUser == null) {
        NavigationHandler nh = facesContext.getApplication().getNavigationHandler();
        nh.handleNavigation(facesContext, null, "loginPage");
      }
  } 
}

public void beforePhase(PhaseEvent event) {
    System.out.println("Hellow World");
}

public PhaseId getPhaseId() {
  return PhaseId.RENDER_RESPONSE;
}

}

我的faces-config

代码语言:javascript
复制
<navigation-rule>
  <from-view-id>/*</from-view-id>
  <navigation-case>
    <from-outcome>loginPage</from-outcome>
    <to-view-id>/login.xhtml</to-view-id>
  </navigation-case>
</navigation-rule>

<lifecycle>
  <phase-listener>br.com.testes.filter.AuthorizationListener</phase-listener>
</lifecycle>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-24 20:30:31

您在render response的后期阶段执行代码。因此,这是在JSF呈现并完成响应之后。此时,整个HTTP响应已经完成,并完全发送到sent浏览器。

这是一个无可挽回的点。为了改变响应,你的代码已经太迟了。

改为在还原视图阶段进行监听。或者,更好的做法是使用servlet filter。JSF阶段侦听器对于作业来说是一个过于笨拙的工具(它不会在非JSF请求中起作用,并且在JSF请求期间被触发多达12次)。servlet筛选器是适合这项工作的工具。你可以在这个答案中找到一个具体的例子:JSF page style missing when using login filter

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16192003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档