在我正在开发的项目中,我们有一个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
发生这种情况的原因是什么?
答案 0 :(得分:0)
所以,我找到了解决方案。
问题是查询字符串中的&符号。我没有意识到你必须逃避XML中的那些。
替换:
queryString += "&display-message=true";
使用:
queryString += "&display-message=true";