java-请求过滤器在嵌入式Jetty的Jersey 2中不起作用

我无法触发我的请求过滤器.我将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中注册了此类,也尝试注册了程序包.它只是被忽略.是一个错误,还是我缺少了什么?

这就是我启动码头的方式:

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).

解决方法:

问题在于,无法实例化定义REST端点的类,因为在我的情况下,实例化取决于必须在请求过滤器中设置的内容.

但是,将在调用过滤器之前实例化端点类.为了首先运行过滤器,必须对它进行@PreMatching注释.

@Provider
@PreMatching
public class MyFilter implements ContainerRequestFilter {
    ...
}
上一篇:深入拆解Tomcat &Jetty——极客时间


下一篇:spring – 如何在jetty 9中禁用基于cookie的JSESSIONID(以及任何其他)会话跟踪功能?