session - Tomcat 禁用 session 不起作用

标签 session tomcat keycloak jsessionid

我在Tomcat 7中部署了几个应用程序,并使用Keycloak来管理这些应用程序的用户登录和注销。注销不起作用,即不会将用户注销并重定向到 Keycloak 的登录页面。然后我发现 JSESSIONID cookie 仍然存在,一旦我删除了 JSESSIONID cookie,注销链接就会按预期工作。所以我试图通过放置

来禁用Tomcat的 session
<%@ page session="false" %>

在我的应用程序的 JSP 页面的标题中。不幸的是,这似乎仍然没有禁用 Tomcat 的 session ,我仍然看到 JSESSIONID cookie 存在。我想知道是否有人可以解决这个问题?我相信 Tomcat session 的存在会干扰 Keycloak 的 SSO session ,并导致 Keycloak 注销无法正常工作。这一定是 Keycloak 用户遇到的一个常见问题,Tomcat 被广泛用于 Web 应用程序。

如有任何关于如何处理此问题的提示,我们将不胜感激!

最佳答案

我没有使用 Keycloak 的具体经验,但是,有一个原则适用于大多数(如果不是全部)单点登录(或外部身份验证)解决方案:

SSO 可识别用户并消除典型应用程序中了解密码的负担。当用户登录时,应用服务器通常与实际的 SSO 系统分离,因此一旦用户被识别,它就需要缓存用户,就像用户通过经典登录识别自己一样。

在注销方面,您可以注销应用程序本身(在本例中为 tomcat),也可以注销 SSO 系统(这似乎就是您在这里所做的)。使用后一种方法,您会遇到“单点注销”的问题:注销 SSO 系统应该会使所有曾经通过关联登录启动的 session 失效。据我所知,SSO 系统需要跟踪所有通过它登录的系统并在那里触发显式注销。

我无法告诉您如何在 Keycloak 中实现这一点,但希望一般原则有助于指导您找到解决方案:

在 Tomcat 端使用或不使用 session 与问题无关:除了登录用户之外,您可能还有在 session 中合法存储信息的应用程序 - 这些应用程序应该继续工作,即使你不是在 tomcat 本身比较密码。

编辑,在您发表评论后:

如果这个页面不触发 session 的使用,任何其他代码(例如处理您的登录的代码)仍然可能触发 session ,然后委托(delegate)给不想使用 session 的页面.

我希望您必须在 Tomcat 的配置中禁用 session ,例如通过提供自定义 "Manager" implementation .看起来默认的不希望您完全忽略 session 。正如我在上面概述的那样,即使您没有通过 Tomcat 本身登录,我也希望 session 是必需的。

另一种避免 session 的方法(这就是为什么我不希望“无 session ”配置起作用的原因)是避免在请求/响应上调用任何会触发自动创建 session 的方法。而且您的应用程序中似乎有这样的方法。

(如果我错了有人纠正我。这主要是我的教育期望,因为我从未看过这个要求)

关于session - Tomcat 禁用 session 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46306486/

相关文章:

php - 如何改进我的用户登录方案

java - Tomcat 中 JNDI 的 Java Mail API 配置文档

java - 从 Java Webstart 启动嵌入式 Tomcat 时出现 AccessControlException

java - OAuth2 客户端凭据通过 Spring Boot Keycloak 集成流

kubernetes - Keycloak和istio服务网格无法正常工作

java - 如何解决 "The required mechanism ' BASIC' 在 HttpAuthenticationFactory 的机制 [KEYCLOAK] 中不可用”

php - 什么时候是将 $_SESSION 数组中的大量值写入数据库中的记录的最佳时机?

具有 2FA 的 Asp.Net Identity - 记住 session 后不保留浏览器 cookie

ASP.NET MVC : How do you access the session from a different project within the solution?

java - Tomcat 7 : cached copy of war file deployed