JSESSIONID存储在哪里? (JavaEE的)

我有两个应用程序 – 一个Java EE Web应用程序和一个Java SE applet。 我想通过JSESSIONID(由Web应用程序创建)在applet中validation用户。

所以有一个问题 – 如何将这个JSESSIONID与特定用户相关联?

如何检查(在Web服务器应用程序端)哪个用户由这样的JSESSIONID表示? 在applet中我将从cookie中读取它,然后我想编写一个简单的Servlet,它将接受这个JSESSIONID作为POST消息。 此后,当JSESSIONID不好时,我想在响应中写任何内容,如果JSESSIONID是好的(即代表某人),则用户信息。

有谁知道如何做到这一点?

JSESSIONID是一种您通常不应该关心的低级机制。 在服务器端,servlet容器透明地将JSESSIONID转换为servlet中可用的HttpSession对象。 会话ID也使用Cookie标头或URL重写透明地传递给服务器。

因此,如果您点击链接或在网页中发布普通表单,浏览器会自动传递JSESSIONID cookie或将其附加到URL。

您的设计有一个主要缺陷:安全的servlet容器应该将HttpOnly属性添加到JSESSIONID cookie(请参阅: 如何在tomcat / java webapps中配置HttpOnly cookie? )这是为了防止JavaScript出于安全原因读取JSESSIONID cookie – 比如劫持用户会话。 你的applet甚至可能看不到那个cookie!

我不太了解applet ,但我会建议你通过Web浏览器以某种方式执行HTTP请求,以便自动处理安全标识(cookie)。

Java EE容器将为您完成大部分工作。 您可以使用几个快捷方式,具体取决于您使用的身份validation方法以及容器行为方式的详细信息。 我暂时不理会那些捷径。 我假设用户以某种forms向Web应用程序提供他们的信息 – 例如通过登录。

当用户登录时,创建会话(如果已存在一个doe snot)并将其用户名(以及您喜欢的任何其他详细信息)作为会话属性添加到会话中。

当有请求进入已有会话时,只需从会话中检索用户详细信息。 容器负责将请求中的会话ID映射到正确的会话对象,并使其可用于请求。

如果会话ID无效,则容器不会将会话对象与请求关联。

最后要注意的是HttpOnly cookies。 容器应默认使用这些会话ID(以防止XSS攻击)。 要使applet可用的会话ID,您需要禁用会话cookie的HttpOnly保护。 这意味着如果您的应用程序有XSS漏洞,攻击者很容易窃取用户会话cookie。