java - 汤姆猫8.5.X : Migrate Valve javacode from Tomcat 7

标签 java migration tomcat7 tomcat8

我需要将我们的自定义 Valve 代码之一从 Tomcat 7 迁移到 Tomcat 8.5:

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpSession;

import org.apache.catalina.Container;
import org.apache.catalina.Manager;
import org.apache.catalina.Session;
import org.apache.catalina.connector.Request;
import org.apache.catalina.connector.Response;
import org.apache.catalina.valves.ValveBase;

public class SessionManagerValve extends ValveBase {

    @Override
    public void invoke(Request request, Response response) throws IOException, ServletException {
      // ...
    }

    public HttpSession findSession(String id, boolean updateLastAccessTime) {
        try {
            Container container = getContainer();

            // works with Tomcat 7.x, but not with Tomcat 8.5 anymore...
            Manager man = container.getManager();

            Session sess = man.findSession(id);
            return sess.getSession();
       } catch (Exception e) {
           return null;
       } 
    }
}

Container 接口(interface)不再提供 getManager() 方法。根据 Tomcat 迁移指南,访问 Manager 已从 Container 转移到 Context

任何人都可以给我提示如何从ValveBase对象中访问Manager吗?

提前致谢, 雷纳

编辑:上下文配置是 - 正如答案中正确指出的 -

<Context path="" ...>
    <Valve className="SessionManagerValve" />
</Context>

最佳答案

假设您的 Valve 位于 Context 级别(上面的代码必须能够正常工作),那么您需要:

((Context) getContainer()).getManager();

关于java - 汤姆猫8.5.X : Migrate Valve javacode from Tomcat 7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44500603/

相关文章:

java - Tomcat,内存泄漏 char[] 和 ThreadWithAttributes

java - 使用 CXF : NoClassDefFoundError: SOAPFaultBuilder 捕获 Web 服务异常

c++ - 将应用程序配置从 Windows 注册表迁移到 SQLite

python - Alembic --autogenerate 产生空迁移

java - 网址为 : "/servlet" goes to "ip/servlet" instead of "ip/app/servlet"

java - mongodb Java Driver构建错误: cannot access com. mongodb.client.result.InsertOneResult,找不到类文件

java - 无法在 tomcat 中部署 Grails War 文件 - 结果为 404

ruby-on-rails - heroku run rake db :migrate error “/usr/bin/env: ruby2.2: No such file or directory”

linux - 无法连接到远程机器 'ssh_exchange_identification: read: Connection reset by peer'

java - 在哪里放置 sqljdbc.jar