在我的代码中,我使用的是来自第3方jar的过滤器类,该类可以实例化一次。 当我创建嵌入式码头服务器实例时,我有几个ServletContextHandler,并且为其中每个添加了过滤器。 有没有一种方法可以在2个或更多上下文处理程序之间共享实例过滤器?
请参见下面的代码:
public static void main (String[] args) {
try {
Server jettyServer = new Server(8080);
final HandlerList handlers = new HandlerList();
ServletContextHandler restCtx = initRestCtx();
ServletContextHandler wsCtx = initWsCtx();
handlers.setHandlers(new Handler[]{
restCtx,
wsCtx,
new DefaultHandler()});
jettyServer.setHandler(handlers);
jettyServer.start();
} catch (Exception e) {
log.error(String.format("An issue occur when starting server: %s",e.getMessage()));
}
}
private static ServletContextHandler initWsCtx() {
ServletContextHandler wsCtx = createSessionBasedContextHandler();
wsCtx.setContextPath("/ws");
wsCtx.addFilter(new MyFilter(), "/*", EnumSet.of(DispatcherType.REQUEST));
return wsCtx;
}
private static ServletContextHandler initRestCtx() {
ServletContextHandler restCtx = createSessionBasedContextHandler();
restCtx.setContextPath("/rest");
restCtx.addFilter(new MyFilter(), "/*", EnumSet.of(DispatcherType.REQUEST));
return restCtx;
}
private static ServletContextHandler createSessionBasedContextHandler() {
ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
servletContextHandler
.getSessionHandler()
.setMaxInactiveInterval(30);
return servletContextHandler;
}
我在这里简化了代码,因此我必须具有2个不同的上下文,并且不能使其成为一个上下文。