如果找不到FacesContext会话属性,如何在JSF中重定向到错误页面

时间:2011-10-14 06:59:01

标签: java session jsf java-ee

我正在使用JSF和Apache myFaces 1.2.9开发移动webapp。

在身份验证期间,我正在调用一个servlet来进行身份验证,然后在会话中设置一些属性。

在每个托管bean构造函数中,我正在检查此会话属性,因此我设置了一个布尔值。这个布尔值我设置为tr的呈现属性的值:document.Something like this

<tr:document title="someid" rendered="#{controller.render}">
//SOME PAGE CONTENTS
</tr:document>

根据会话属性,页面可能会呈现或不呈现。我想更优雅地处理这个问题。

我在SO中通过了this question告诉了过滤器的使用情况。我使用了here所示的过滤器。

我将webFilter urlPattern更改为/faces/jsp/*,因为我想检查每个jsp的会话属性。

在doFilter()方法中,我正在检查这样的会话属性 如果是null,我将重定向到无效的用户页面。

System.out.println("In doFilter");
            HttpServletRequest request = (HttpServletRequest) req;
            HttpServletResponse response = (HttpServletResponse) res;
            HttpSession session = request.getSession(false);

            if (session.getAttribute("myattribute") == null) {
       response.sendRedirect(properties.getProperty(INVALID_USER_REDIRECTURL, true));  // No attribute found, so redirect to Invalid user page.
            } else {
                chain.doFilter(req, res); // attribute found, so just continue request.
            }

但我没有看到我的过滤器被触发,因为我没有看到我在过滤器init(),doFilter()方法中保留的任何调试语句。

任何帮助?

编辑:我刚刚在我的web.xml中找到了这个过滤器映射

<filter>
    <filter-name>trinidad</filter-name>
    <filter-class>org.apache.myfaces.trinidad.webapp.TrinidadFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>trinidad</filter-name>
    <servlet-name>faces</servlet-name>
  </filter-mapping>

我认为myfaces有一些过滤器。我可以拥有另一个吗?

1 个答案:

答案 0 :(得分:1)

将过滤器映射到FacesServlet映射的URL模式。