gpt4 book ai didi

Java Web 应用程序对象调度

转载 作者:行者123 更新时间:2023-12-01 14:09:22 26 4
gpt4 key购买 nike

HttpSession 对象是否可用于同一 Java 企业应用程序服务器中运行的所有应用程序?

对于我的工作,我有登录应用程序来进行身份验证,然后将其转发到另一个应用程序。在第二个应用程序中,添加过滤器以防止直接访问 URL

ServletContext - 仅获取当前 Web 应用程序的上下文。

处理这种情况的正确方法是什么?

最佳答案

HttpSession 对象的范围位于应用程序(或 servlet 上下文)级别。

摘自Java™ Servlet Specification :

HttpSession objects must be scoped at the application (or servlet context) level. The underlying mechanism, such as the cookie used to establish the session, can be the same for different contexts, but the object referenced, including the attributes in that object, must never be shared between contexts by the container.

To illustrate this requirement with an example: if a servlet uses the RequestDispatcher to call a servlet in another Web application, any sessions created for and visible to the servlet being called must be different from those visible to the calling servlet.

处理这种情况的方法:

您可以使用servletContext.getContext("/otherWebappContext")从另一个servlet上下文访问可用于一个servlet上下文的资源。方法如下:

request.setAttribute("userToken", <token>);
RequestDispatcher requestDispatcher = getServletContext().getContext(
"/otherWebappContext").getRequestDispatcher("/resource");
requestDispatcher.forward(request, response);

但是为被调用的 servlet 创建的任何 session 都与调用 servlet 的 session 不同。一旦请求被转发到第二个应用程序,它就可以使用通过请求属性接收到的数据创建一个新 session 。

但出于安全原因,Servlet 容器通常会阻止这些跨上下文操作。所以你需要改变默认行为。例如,在 Tomcat 6 中,您需要将 <Context> 的 crossContext 属性设置为“true” TOMCAT_HOME/conf/context.xml 文件中的元素如下:

<?xml version='1.0' encoding='utf-8'?>
<Context crossContext="true">

<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

关于Java Web 应用程序对象调度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18651392/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com