问题描述
对于非ajax请求,过滤器执行HttpServletResponse.sendRedirect(myUrl)来执行重定向,效果很好。但是,对于ajax类型请求我不能说同样的话。
对于ajax请求,过滤器执行HttpServletResponse.getWriter()。println(partialResponseContent)以执行重定向。没用屏幕保持不变,似乎被冻结并且禁止所有输入字段。关于我可能会缺少的或我能找出问题原因的任何指针?
以下是partialResponseContent:
<?xml version="1.0" encoding="UTF-8"?><partial-response><redirect url="/MyAccount/command?cmd=twoFA&TargetUrl=/MyAccount/viewDevices.jsf"></redirect></partial-response>
我在Chrome的“开发人员工具”屏幕中仔细检查了一下,发现内容已正确发送(请参见附件图像)。
解决方法
为此浪费了两天。但是,我很高兴终于能够正常工作。该问题是由url属性(在redirect元素中)的值未经过xml编码引起的。我的网址包含&字符。需要将其编码为&amp;为重定向工作。注意:我使用org.apache.commons.lang.StringEscapeUtils.escapeXml进行xml编码。
以下是之前的编码:
<?xml version="1.0" encoding="UTF-8"?><partial-response><redirect url="/MyAccount/command?cmd=twoFA&TargetUrl=/MyAccount/viewDevices.jsf"></redirect></partial-response>
以下是编码后的内容
:<?xml version="1.0" encoding="UTF-8"?><partial-response><redirect url="command?cmd=twoFA&TargetUrl=/MyAccount/viewDevices.jsf"></redirect></partial-response>