JSF - 在servlet Filter

时间:2018-06-06 13:14:52

标签: jsf servlets

在我正在开发的项目中,我们有一个LoginFilter,用于重定向未登录的用户。

我在重定向ajax请求时遇到了一些问题,但是使用这种方法使其工作正常:Authorization redirect on session expiration does not work on submitting a JSF form, page stays the same

现在我正在尝试向重定向URL的查询字符串添加参数,因此登录逻辑可以将用户重定向到正确的视图,因此视图知道它是否应该显示消息。这是我的doFilter方法的简化版本:

String loginPath = contextPath + "/login.xhtml";
String AJAX_REDIRECT_XML =
        "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<partial-response><redirect url=\"%s\"></redirect></partial-response>";

if(userLoggedIn) {
    ...
} else if ("partial/ajax".equalsIgnoreCase(httpServletRequest.getHeader("Faces-Request")) {
    String queryString = "?destination="
    queryString += URLEncoder.encode(contextPath + "/home.xhtml", "UTF-8");
    queryString += "&display-message=true";

    httpServletResponse.setContentType("text/xml")
    httpServletResponse.setCharacterEncoding("UTF-8");
    httpServletResponse.getWriter().printf(AJAX_REDIRECT_XML, loginPath + queryString);
    return;
} else {
    ...
}

如果我只在查询字符串中添加一个参数,则会有效,但如果两者都存在则不会。我得到了正确的XML响应,但似乎客户端javascript不知道如何处理它?这是从ajax请求返回的XML的示例。

<?xml version="1.0" encoding="UTF-8"?><partial-response><redirect url="/contextPath/login.xhtml?destination=%2FcontextPath%2Fhome.xhtml&display-message=true"></redirect></partial-response>

在浏览器控制台中,我收到此错误:

 XML Parsing Error: not well-formed

发生这种情况的原因是什么?

1 个答案:

答案 0 :(得分:0)

所以,我找到了解决方案。

问题是查询字符串中的&符号。我没有意识到你必须逃避XML中的那些。

替换:

queryString += "&display-message=true";

使用:

queryString += "&amp;display-message=true";