JSF / PrimeFaces / AJAX请求/ WEbFilter和viewexpired异常

时间:2014-08-07 12:36:32

标签: session primefaces jsf-2.2 glassfish-4 java-ee-7

我正在开始一个需要PrimeFaces 5.0组件的新JavaEE7项目。 JSF实现是Mojarra 2.2.0。

设置初始项目依赖项后,我开始实现用户会话的处理,并正常处理viewExpiredException。

第一步,我将下面的代码添加到web.xml中,因此在Session过期后,用户将被重定向到适当的页面。优异。

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

之后我在Session过期后添加了PrimeFaces并测试了AJAX组件。不工作! 然后我将下面的代码添加到faces-config.xml中,所以在Session调出后调用AJAX后,用户被重定向到适当的页面。优异。

<factory>
    <exception-handler-factory>
        org.primefaces.application.exceptionhandler.PrimeExceptionHandlerFactory
    </exception-handler-factory>
</factory>

然后我去实现WebFilter来处理这样的授权:

@WebFilter("/*")
public class AuthorizationFilter implements Filter {

@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException {
    HttpServletRequest request = (HttpServletRequest) req;
    HttpServletResponse response = (HttpServletResponse) res;

    HttpSession session = request.getSession(false);

    User user = (session != null) ? (User) session.getAttribute("user") : null;
    String loginURL = request.getContextPath() + "/login.xhtml";

    boolean loginRequest = request.getRequestURI().startsWith(loginURL);
    boolean resourceRequest = request.getRequestURI().startsWith(request.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER);

    if (user != null || loginRequest || resourceRequest) {
        chain.doFilter(request, response);
    } else {
        response.sendRedirect(loginURL);
    }
}

之后,我正常处理的viewExpiredException消失了(好的,我将处理Filter中的Session),但Session过期后的AJAX请求不再处理。这是否意味着,当我实现WebFilter时,我必须处理其中的所有请求(也检测AJAX调用并进行适当的重定向),我可以丢弃我的web.xml和faces-config.xml配置以获取异常吗?

TIA, D00de。

0 个答案:

没有答案