Tomcat 8.5.X:从 Tomcat 7 迁移 Valve javacode

Tomcat 8.5.X: Migrate Valve javacode from Tomcat 7

我需要将我们的一个自定义 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接口不再提供getManager()方法。根据 Tomcat 迁移指南,访问 Manager 已从 Container 移动到 Context

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

提前致谢, 莱纳

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

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

假设您的 Valve 处于 Context 级别(必须是上面的代码才能工作),那么您需要:

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