我正在尝试使用最新的可能技术 Jakarta Faces 4.0、OIDC Jakarta security、Elytron Oidc Client、Wildfly 27.0.1、Keycloak 21.0.2(wildfly 上没有适配器)构建 Web 应用程序。
页面效果很好,当我点击一个安全链接时,它会将我重定向到我的领域的 KeyCloak 服务器登录页面,在那里我登录并被重定向回我点击的链接。
问题是当我登录时,然后打开两个选项卡(带有安全 url),然后在第一个选项卡中注销。在第二个中,所有 ajax 点击都不再起作用了。
我正在使用 omnifaces AjaxExceptionHandler。
<factory> <exception-handler-factory>org.omnifaces.exceptionhandler.FullAjaxExceptionHandlerFactory</exception-handler-factory> <exception-handler-factory>org.omnifaces.exceptionhandler.ViewExpiredExceptionHandlerFactory</exception-handler-factory></factory>
在图片“2023-04-16 21-45-22 的屏幕截图”中显示了按下 ajax 按钮时请求的样子。
在“2023-04-16 21-45-43 的截图”图片上,我们可以看到回复。但是因为它是在 ajax 调用中,所以我不能使用它。
如果我单击标题中的新位置(图片“2023-04-16 21-45-22 的屏幕截图”),则会加载身份验证页面,成功登录后我会得到响应:
<partial-response> <redirect url="/marketing_view/app/customers/index.xhtml"/> </partial-response>
在 Wildfly 上,我使用的是反向代理,因此当我从 ajax 按钮重定向到 auth 登录页面并且我不想在重定向到登录时更改 url 时,跨站点脚本没有问题。
我在想的是,如果我的会话已过期并且我正在单击 ajax 按钮,我应该在 POST 请求的 http 重定向之前获得
<partial-response> <redirect
。重定向不应发生在 ajax 上。
你能告诉我 Wildfly 中的哪个组件正在响应 302 吗?我的项目只有 OIDC,我正在使用 Jakarta 10。
我想知道如果会话在其他选项卡中无效时发出ajax请求怎么办?
我也试过设置
autodetect-bearer-only
,它做出了改变。不再根据 POST 请求重定向并返回 401。使用该设置,我遇到了如何连接 Jakarta Security 和浏览器客户端的问题。 Ajax 调用在没有该设置的情况下工作正常。