Tomcat禁用会话无法正常工作

时间:2017-09-19 17:27:13

标签: session tomcat keycloak jsessionid

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

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

在我的应用的标题中&#39; JSP页面。不幸的是,这似乎仍然没有禁用Tomcat的会话,我仍然看到JSESSIONID cookie存在。我想知道是否有人有解决这个问题的方法?我相信Tomcat会话的存在会干扰Keycloak的SSO会话,并导致Keycloak注销不起作用。这必须是Keycloak用户遇到的常见问题,Tomcat广泛用于Web应用程序。

非常感谢我们应该如何处理这个问题!

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

您的评论后

修改

如果这一页没有触发会话的使用,任何其他代码(例如处理您的登录的代码)仍然可能触发会话,然后委托给不想要的页面使用会话。

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

避免会话的另一种方法(这是我不希望&#34;没有会话&#34;配置工作的指示器)是避免调用任何会触发自动创建的请求/响应方法会议。似乎你的应用程序中有某种方法。

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