页面加载时JSF重定向

Jam*_* P. 4 java jsf redirect

简短的问题:是否可以进行重定向,例如当用户未登录时,何时呈现页面?

Bal*_*usC 9

为此,你应该使用Filter.

例如

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException { 
    if (((HttpServletRequest) request).getSession().getAttribute("user") == null) {
        ((HttpServletResponse) response).sendRedirect("error.jsf"); // Not logged in, so redirect to error page.
    } else {
        chain.doFilter(request, response); // Logged in, so just continue.
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里,我假设它User已经按照您通常的预期放在会话范围内.它可以是具有名称的会话作用域JSF托管bean user.

导航规则不适用,因为在正常GET请求期间没有"bean操作"的方法.当要构建托管bean时,还要进行重定向是不可行的,因为当在正常GET请求期间构建托管bean时,响应已经开始呈现并且这是一个不归路的点(它只会产生IllegalStateException: response already committed).PhaseListener很麻烦且非常庞大,因为您实际上不需要监听任何JSF阶段.您只想听取"普通"HTTP请求以及会话范围中某个对象的存在.为此,过滤器是完美的.