将 Shiro 1.2.6 更新到 1.3.0 会中断对服务器端的访问

Posted

技术标签:

【中文标题】将 Shiro 1.2.6 更新到 1.3.0 会中断对服务器端的访问【英文标题】:Updating Shiro 1.2.6 to 1.3.0 breaks access to server side 【发布时间】:2021-08-20 02:47:19 【问题描述】:

在我的应用程序中,我只更新了 Shiro 库,从 shiro-all-1.2.6.jar 到 shiro-all-1.3.0.jar。除了引用新 Shiro 库的构建路径之外,我没有更改任何其他库或配置文件。

日志显示用户确实登录了,但服务器端在 shiro 登录后就无法访问了。

试图弄清楚 1.2.6 和 1.3.0 之间发生了什么变化,以及我需要更改哪些设置,以使应用程序像以前一样工作。

非常感谢! -阿丽娜。

【问题讨论】:

嗨@afrey!您能否在这篇文章中添加更多详细信息,您在日志中看到的错误,服务器返回的响应代码。您所说的“构建路径”是指手动管理工件还是通过 Maven 或 Gradle 等构建工具管理工件? SO 在如何提出更好的问题上有很好的资源:@​​987654321@ 在 Eclipse 中使用 ANT 构建。 只要我修改了 Shiro.ini 中的 URL 以反映路径开头没有斜杠“/”的路径,我就能够访问服务器端:[urls] / FileUploadServlet = authc /FileDownloadServlet = authc /UserUnloadServlet = authc /soa_service = authc /data_update = authc /data_view = authc /load_lists = authc /error_services = authc /query_db = authc .html = authc 另一个发现是 currentUser.isAuthenticated() 在 Shiro 1.2.6 中返回 TRUE,在 Shiro 1.3.0 中返回 FALSE。这就是我的应用程序没有加载的原因。这是用于此的代码:Subject currentUser = SecurityUtils.getSubject(); if (currentUser.isAuthenticated()) return true; 否则 返回错误;此外,currentUser.getPrincipal() 使用 shiro 1.3.0 返回 null,而返回使用 shiro 1.2.6 的登录用户。所以,我必须弄清楚是否需要以不同的方式调用当前用户,或者我的 shiro.ini 中是否需要更改一些内容。 你试过调高 Shiro 的日志吗? 'org.apache.shiro'。如果您也需要,您可以将其调高到 TRACE。 【参考方案1】:

经过更多挖掘,我发现与服务器的连接丢失了,因为在此过程中,由于初始会话丢失,因此创建了一个新会话。

当调用Session session = currentUser.getSession(); 时,我希望获得与登录用户关联的相同会话。相反,会创建一个新会话,因为旧会话不会持续存在。

同样,Shiro 1.3.0 会发生这种情况,但 Shiro 1.2.6 不会发生这种情况。

我想知道是否有我们需要应用的设置,以使会话持续存在并且不会丢失。我想知道会话是否会立即超时。

【讨论】:

以上是关于将 Shiro 1.2.6 更新到 1.3.0 会中断对服务器端的访问的主要内容,如果未能解决你的问题,请参考以下文章

如何记录 Shiro 输出?

Shiro 在 2 分钟后重置会话

SpringBoot整合Shiro实现权限控制

SpringBoot整合Shiro实现权限控制

SpringBoot整合Shiro实现权限控制

更新Apache Shiro 权限绕过漏洞CVE-2020-13933