我需要将我们的自定义 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/