crossContext属性在Tomcat中的作用是什么?它是否启用会话共享?

时间:2009-03-19 12:12:30

标签: session java-ee tomcat cross-context

我在Tomcat 5.5 docs中找到的只有:

  

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

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

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

crossContext属性真正在Tomcat中做了什么?

3 个答案:

答案 0 :(得分:19)

您可以使用Single Sign-On Valve分享网络应用程序之间的会话。

如果要在同一个虚拟主机中的不同Web应用程序之间共享某些信息,则可以设置crossContext=true

例如app1会调用:

setAttribute("name", object);

另一个应用可以调用

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

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

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

答案 1 :(得分:11)

来自javadoc ServletContext.getContext()

  

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

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

答案 2 :(得分:0)

我自己尝试了,但是找不到魔法会话共享副作用,所以crossContext属性只执行文档所说的内容。

我发布了another question,看看是否有办法分享会话状态。