4

web.xml 中是否有任何配置在JSF中的会话过期后将应用程序重定向到登录页面。我用谷歌搜索但没有找到任何好的和简单的答案。
我找到了这个,但它没有用。

 <error-page>
    <exception-type>javax.faces.application.ViewExpiredException</exception-type>
    <location>/faces/index.xhtml</location>
</error-page>

如果没有为此配置,那么我如何在 JSF 中执行此操作?
谢谢

4

3 回答 3

2

可能的答案:根据当前视图处理 ViewExpiredException

我使用的是 PrimeFaces - Extensions 特定的解决方案,称为AjaxErrorHandler。看看他们展示的实施技巧。

据我所知,上述配置不适用于 AJAX 请求。

于 2012-10-18T07:18:38.640 回答
1

另一个可能的答案:如果在 jsf 应用程序中发生会话超时,如何重定向到索引页面

另一个可能的答案:使用JSF PhaseListener.


另外,我建议使用 aFilter检查您的会话是否已经存在,如果没有,则重定向到您的自定义错误页面(我不记得我在哪里学到了这个方法,可能是通过 BalusC):

public class AuthenticationFilter implements Filter {
    private FilterConfig config;

    public void init(FilterConfig filterConfig) throws ServletException {
        this.config = filterConfig;
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        if(((HttpServletRequest) request).getSession().getAttribute("some_attribute_you_store_in_Session") == null){
            ((HttpServletResponse)response).sendRedirect("yourCustomJSF.jsf");
        }else{
            chain.doFilter(request, response);
        }
    }

    public void destroy() {
        this.config = null;
    }

    // You also have to implement init() and destroy() methods.
}

然后,您必须在 web.xml 中声明此过滤器(以及将触发过滤器的 url 模式):

<filter>
    <filter-name>AuthenticationFilter</filter-name>
    <filter-class>yourPackage.AuthenticationFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>AuthenticationFilter</filter-name>
    <url-pattern>private.jsf</url-pattern>
</filter-mapping>

我将自己的 bean 存储在我的 JSF 会话中,这样我就可以保留我的用户信息。当过滤器在访问类时收到null返回时,我知道会话已经失效(可能是因为它已经过期,或者只是用户已经注销)并且我将请求重定向到我的错误页面。

于 2012-10-18T07:52:47.383 回答
0

我找到了这个,但它没有用。

It should work. Most likely you were exclusively using ajax requests. This way the standard web.xml error page mechanism won't be used at all. You should instead be using the JSF ExceptionHandler facility.

The JSF utility library OmniFaces has a FullAjaxExceptionHandler which is designed for exactly this purpose. It reuses standard web.xml error page mechanisms for exceptions/errors during ajax requests. You can find a showcase demo here. It also handles the ViewExpiredException.

See also:

于 2012-10-18T11:17:38.800 回答