Jsf <;部分响应>;WildFly中基于安全约束的ajax重定向后显示为纯文本的XML

Jsf <;部分响应>;WildFly中基于安全约束的ajax重定向后显示为纯文本的XML,jsf,wildfly,omnifaces,security-constraint,partial-response,Jsf,Wildfly,Omnifaces,Security Constraint,Partial Response,我遇到了一个关于安全约束的ajax重定向的奇怪问题: 在会话超时后,在角色安全页面上进行ajax调用(通过单击可排序的p:dataTable列或触发p:poll时),我会复制它。这是WildFly本身的一个奇怪的怪癖/缺陷 这里发生了什么事 默认情况下,在没有OmniFaces的情况下,当会话过期时在受约束的页面上触发请求时,服务器默认返回由标识的整个HTML页面作为响应,而不管请求的来源如何。这对于jsfajax请求显然是失败的,因为负责处理ajax请求的JavaScript无法将整个HTML

我遇到了一个关于安全约束的ajax重定向的奇怪问题:


在会话超时后,在角色安全页面上进行ajax调用(通过单击可排序的
p:dataTable
列或触发
p:poll
时),我会复制它。这是WildFly本身的一个奇怪的怪癖/缺陷

这里发生了什么事

默认情况下,在没有OmniFaces的情况下,当会话过期时在受约束的页面上触发请求时,服务器默认返回由
标识的整个HTML页面作为响应,而不管请求的来源如何。这对于jsfajax请求显然是失败的,因为负责处理ajax请求的JavaScript无法将整个HTML页面作为响应处理,因为它需要一个特殊的XML响应。用户没有任何形式的反馈。这是因为OmniFaces 1.2在其
OmniPartialViewContext
中修复了,由以下相关问题触发:

在OmniFaces中,以
的形式返回一个特殊的JSF ajax重定向响应,而不是返回整个登录页面,并且再次触发安全约束,但这次是使用一个真正的同步请求,而不是JSF ajax请求。当服务器返回整个
时,这样就可以正常工作了

然而,WildFly(到目前为止仅测试了10.0.0)似乎缓存了会话中第一次安全约束命中的整个
响应(而预期它只缓存关联的请求),并在每次命中受约束的请求时准确返回该响应。这就是为什么每次都会看到初始的
XML响应


根据,在
OmniPartialViewContext
中生成ajax重定向之前,我再次显式地使会话无效,从而绕过了它。修复程序在OmniFaces 2.3中提供。

要排除一个和另一个,如果保留
*.xhtml
URL模式,而不使用
/javax.faces.resource/*
URL模式和
UnmappedResourceHandler
,那么在删除
/javax.faces.resource/*
UnmappedResourceHandler
后仍然会出现问题,因此与
UnmappedResourceHandler
无关。我建议根据新的发现重新组织你的问题。您使用的是哪种身份验证框架和哪种服务器?您是对的。我正在使用来自Wildfly 10的内置JAAS认证。复制它,这是Wildfly特有的怪癖/错误。我在OmniFaces2.3快照中有它。你能试试吗?当我在匿名/私有模式下测试浏览器时,我无法重现
*.jsf
/
*.xhtml
问题。因此,这可能是我的缓存问题。它也适用于WildFly 8.2.0。如果在会话超时后发出Ajax请求,则显示。OmniFaces2.3是JSF2.3的快照吗?什么时候正式版本可以用于这个bug修复?不,OmniFaces2.x仍然适用于JSF2.2。只有OmniFaces3.x适用于JSF2.3。我希望在本周发布OmniFaces 2.3 RC1(最重要的部分,终于完成了)。谢谢你,这是你的一个很大帮助。@BalusC,关于这个答案:你提供了这个问题的几乎完整的解决方案,按照你在提交中所做的,我是否可以假设它在try{}中只缺少invalidateSession()陈述如果是这样的话,如果你在你的答案中为像我这样不依赖omnifaces的人添加了遗漏的一行,那就太好了。
<security-constraint>
    <web-resource-collection>
        <web-resource-name>Pages</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>user</role-name>
    </auth-constraint>
</security-constraint>

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Resources</web-resource-name>
        <url-pattern>/javax.faces.resource/*</url-pattern>
    </web-resource-collection>
</security-constraint>

<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>myRealm</realm-name>
    <form-login-config>
        <form-login-page>/login.xhtml</form-login-page>
        <form-error-page>/login.xhtml?error=true</form-error-page>
    </form-login-config>
</login-config>

<security-role>
    <role-name>user</role-name>
</security-role>