我制作了一个简单的ORDS插件,该插件具有一个简单的servlet过滤器:
import oracle.dbtools.plugin.api.di.annotations.Priority;
import oracle.dbtools.plugin.api.di.annotations.Provides;
@Priority
@Provides
public class OrdsFilter implements Filter {
@Override
public void init(FilterConfig fc) throws ServletException {
System.out.println(getClass().getName() + " init, " + fc);
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain fc) throws IOException, ServletException {
System.out.println(getClass().getName() + " doFilter");
fc.doFilter(req, resp);
}
@Override
public void destroy() {
System.out.println(getClass().getName() + " destroy");
}
}
,对其进行编译并将其作为插件放入ords.war中。它会按预期被调用。
下一步,我要做的是以某种方式获取JDBC连接对象的句柄,因此我可以将请求和响应数据记录到db表中。我尝试使用Inject注释将连接注入到过滤器中,但是现在不会调用过滤器。
我认为问题是ORDS当时不知道它将使用哪个数据库连接来处理该请求,因此过滤器无法获取该数据库连接的句柄?
另一方面,我认为我不能使用servlet来实现此目的,因为servlet绑定到了具体的URL,对吧?
有什么建议吗?