12

我可以在Tomcat 5.5 文档中找到的是:

如果您希望在此应用程序中调用 ServletContext.getContext() 以成功地为在此虚拟主机上运行的其他 Web 应用程序返回请求调度程序,则设置为 true。在有安全意识的环境中设置为 false(默认值),以使 getContext() 始终返回 null。

我发现一些论坛帖子评论该设置crossContext=true还允许在不同的 Web 应用程序之间共享会话对象,但我找不到任何官方文档说明这一点。

Servlet.getContext() 与在不同 Web 应用程序之间共享会话状态的能力之间是否存在关系?

crossContext属性在 Tomcat 中的真正作用是什么?

4

3 回答 3

19

您可以使用Single Sign-On Valve在 Web 应用程序之间共享会话。

crossContext=true如果您想在同一虚拟主机中的不同 Web 应用程序之间共享某些信息,您将进行设置。

例如 app1 会调用:

setAttribute("name", object);

另一个应用程序可以调用

getContext("/app1").getAttribute("name");

阅读信息。如果 crossContext 未设置为 true,则 getContext("/app1") 将返回 null。

然而,crossContext 的使用既罕见又可能不安全。

于 2009-03-20T07:23:52.097 回答
11

从 javadoc ServletContext.getContext()

此方法允许 servlet 访问服务器各个部分的上下文,并根据需要从上下文中获取 RequestDispatcher 对象。给定的路径必须以“/”开头,相对于服务器的文档根进行解释,并与托管在此容器上的其他 Web 应用程序的上下文根匹配。

因此,例如,如果您想包含来自不同 web 应用程序的页面,您需要将 crossContext 设置为 true。

于 2009-03-19T12:29:56.947 回答
0

我自己试过了,我找不到神奇的会话共享副作用,所以 crossContext 属性只做文档所说的。

我发布了另一个问题,看看是否有办法共享会话状态。

于 2009-03-20T12:37:18.473 回答