我在 Tomcat 6.0.24 上运行一个 Java 应用程序,它需要能够在运行时动态更改 JSESSIONID cookie 的 PATH。在决定最简单的方法可能是扩展 org.apache.catalina.core.StandardContext 并覆盖 getEncodedPath 函数之前,我花了很长时间尝试在过滤器中操作 cookie。
我创建了一个名为 MultiTabContext 的自定义上下文,它扩展了 StandardContext 并删除了所有出现的类路径问题。我已经在 catalina/conf/server.xml 中定义了我的上下文(我知道它应该在 context.xml 中,但我稍后会解决这个问题):
<Server port="8005" shutdown="SHUTDOWN">
...
<Service name="Catalina">
...
<Engine name="Catalina" defaultHost="localhost">
...
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
...
<!-- HERE IS MY CONTEXT -->
<Context className="foo.app.server.MultiTabContext"
path=""
crossContext="false"
debug="0"
reloadable="true"/>
</Host>
</Engine>
</Service>
</Server>
这是我的 MultiTabContext:
package foo.app.server;
import org.apache.catalina.core.StandardContext;
public class MultiTabContext extends StandardContext {
@Override
public String getEncodedPath() {
return super.getEncodedPath();
}
}
因为路径是“”,所以我希望在每个请求上都使用我的上下文,而不是 StandardContext。但是,该应用程序仍在使用 StandardContext,而不是我的。任何人都知道如何定义上下文,以便 Tomcat 使用我的而不是 StandardContext(或者知道动态更改 JSESSIONID cookie 路径的更好方法)?