gpt4 book ai didi

jsf - FullAjaxExceptionHandler 不会在 ajax 按钮上显示 session 过期错误页面

转载 作者:行者123 更新时间:2023-12-04 19:39:22 26 4
gpt4 key购买 nike

我已经实现了 Omnifaces FullAjaxExceptionHandler,但问题是它无法处理 ajax 请求。当我单击非 ajax 按钮时 session 过期后,它运行良好。它将用户重定向到自定义错误页面。但是如果按钮使用ajax,它什么都不做。页面卡住了。

编辑:我已将 ActionListener 更改为 Action 并且仍然相同。

Edit2:它没有给出错误。既没有 Apache Tomcat 输出也没有 Apache Tomcat 日志。

enter image description here

这是我的 Spring 安全;

<http auto-config='true' use-expressions="true">
<intercept-url pattern="/login" access="permitAll"/>
<intercept-url pattern="/ajaxErrorPage" access="permitAll"/>
<intercept-url pattern="/pages/*" access="hasRole('admin')" />
<intercept-url pattern="/j_spring_security_check" access="permitAll"/>
<logout logout-success-url="/login.xhtml" />
<form-login login-page="/login.xhtml"
login-processing-url="/j_spring_security_check"
default-target-url="/pages/index.xhtml"
always-use-default-target="true"
authentication-failure-url="/login.xhtml"/>
</http>

最佳答案

您正在发送同步重定向作为对 ajax 请求的响应(使用例如 response.sendRedirect() 的 HTTP 302 响应)。这个不对。 JavaScript ajax 引擎将 302 响应视为重新发送 ajax 请求的新目的地。但是,这又会返回一个普通的 HTML 页面,而不是带有说明要更新页面的哪些部分的 XML 文档。这是令人困惑的,因此完全忽略了重定向的响应。这恰恰解释了您所面临的症状。

在以下密切相关的问题中也提出并回答了同样的问题:

基本上,您需要以某种方式指示 Spring Security 执行以下条件检查:

if ("partial/ajax".equals(request.getHeader("Faces-Request"))) {
// JSF ajax request. Return special XML response which instructs JavaScript that it should in turn perform a redirect.
response.setContentType("text/xml");
response.getWriter()
.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")
.printf("<partial-response><redirect url=\"%s\"></redirect></partial-response>", loginURL);
} else {
// Normal request. Perform redirect as usual.
response.sendRedirect(loginURL);
}

但是我不是 Spring 用户,我对使用它不感兴趣,因此无法给出更详细的答案如何在 Spring Security 中执行此检查。但是我可以说 Apache Shiro 有完全相同的问题,这篇博客文章中解释和解决了这个问题:Make Shiro JSF Ajax Aware .

关于jsf - FullAjaxExceptionHandler 不会在 ajax 按钮上显示 session 过期错误页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17296420/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com