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

13
我在Tomcat 5.5文档中能找到的全部内容是:

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

我发现一些论坛帖子评论称,设置crossContext=true还可以启用不同Web应用程序之间共享会话对象,但我无法找到任何官方文档说明这一点。
Servlet.getContext()和不同Web应用程序之间共享会话状态之间是否有联系?
在Tomcat中,crossContext属性到底实际上做了什么?
3个回答

19

您可以使用单点登录阀门在Web应用程序之间共享会话。

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

例如,app1将调用:

setAttribute("name", object);

另一个应用程序可以调用

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

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

然而,使用crossContext既罕见又潜在不安全。


谢谢,但我不是在寻找单点登录,我需要共享HttpSession属性。请查看我的新问题https://dev59.com/tHRB5IYBdhLWcg3wUFnB - Serxipc
谢谢大家,特别是你,先生。谢谢你救了我的命。 - Dilllllo
在另一个应用程序上访问getContext(“app1”)。getAttribute(“name”)会增加app1的会话超时时间吗? - Voonic

11

根据 javadoc ServletContext.getContext()

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

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


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

0

我自己尝试了一下,但是我找不到那个神奇的会话共享副作用,所以crossContext属性只能做文档中所说的事情。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接