我在Tomcat 5.5 docs中找到的只有:
如果要在此应用程序中调用ServletContext.getContext()以成功返回在此虚拟主机上运行的其他Web应用程序的请求调度程序,则设置为true。在安全意识环境中设置为false(默认值),以使getContext()始终返回null。
我发现了一些论坛帖子,评论设置crossContext=true
还可以在不同的网络应用程序之间共享会话对象,但我找不到任何官方文档说明这一点。
Servlet.getContext()与不同Web应用程序之间共享会话状态的能力之间是否存在关系?
crossContext
属性真正在Tomcat中做了什么?
答案 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,看看是否有办法分享会话状态。