我无法触发我的请求过滤器。我将jetty 9.1作为嵌入式服务器运行。
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.ext.Provider;
@Provider
public class MyFilter implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext arg0) throws IOException {
System.out.println("HEY HO");
}
}
我在ResourceConfig中注册了这个类,也尝试注册该包。它被忽略了。这是一个错误,还是我错过了什么?
这就是我开始Jetty的方式:
Weld weld = new Weld();
WeldContainer container = weld.initialize();
URI baseUri = UriBuilder.fromUri("http://localhost/").port(8080).build();
ResourceConfig config = ResourceConfig.forApplicationClass(MyApplication.class);
Server server = JettyHttpContainerFactory.createServer(baseUri, config);
(MyApplication扩展了ResourceConfig并在构造函数中调用了this.package(...)
和this.register(MyFilter.class)
。
答案 0 :(得分:5)
问题是定义REST端点的类无法实例化,因为 - 在我的情况下 - 实例化取决于必须在请求过滤器中设置的内容。
但是,在调用过滤器之前,端点类是实例化的。要先运行过滤器,必须对其进行注释@PreMatching
。
@Provider
@PreMatching
public class MyFilter implements ContainerRequestFilter {
...
}
答案 1 :(得分:-1)
在具有Jersey REST服务的自包含Jetty jar文件中启用跨源请求(允许来自Swagger-UI的调用)。创建CORSResponseFilter类:
public class App {
public static void main(String[] args) throws Exception {
URI baseUri = UriBuilder.fromUri("http://localhost/").port(8080).build();
ResourceConfig config = new ResourceConfig(API.class);
config.register(CORSResponseFilter.class);
Server jettyServer = JettyHttpContainerFactory.createServer(baseUri, config);
try {
jettyServer.start();
jettyServer.join();
} finally {
jettyServer.destroy();
}
}
}
并在您的主App类中引用它:
vars()
}
通过类似的方式,我们必须使用码头和平针织物嵌入过滤器。希望这将使用完整。