문제

나는 할 수 없을 요청 필터 실행됩니다.실행 jetty9.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);

(다.장 ResourceConfig 와 통화 this.package(...)this.register(MyFilter.class) 에서 생성자입니다.

도움이 되었습니까?

해결책

문제는 클래스를 정의하는 나머지 부분 끝점 인스턴스화할 수 없기 때문에 나의 케이스-인스턴스화에 따라 물건을 설정해야 할까지 요청에 필터가 있습니다.

그러나,endpoint 클래스 instanciated 필터를 호출됩니다.기 위해서는 필터를 실행하려면 첫째로,그것은석 @PreMatching.

@Provider
@PreMatching
public class MyFilter implements ContainerRequestFilter {
    ...
}

다른 팁

저지 REST 서비스가있는 자체 포함 된 Jetty JAR 파일에서 원점 간 요청을 사용하도록 설정합니다 (Swagger-UI에서 호출을 허용합니다).CorsResponseFilter 클래스 만들기 :

public class CORSResponseFilter implements ContainerResponseFilter {

public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
        throws IOException {

    MultivaluedMap headers = responseContext.getHeaders();

    headers.add("Access-Control-Allow-Origin", "*");
    //headers.add("Access-Control-Allow-Origin", "http://podcastpedia.org"); //allows CORS requests only coming from podcastpedia.org
    headers.add("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
    headers.add("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, X-Codingpedia");
}
.

}

주요 앱 클래스에서 참조하십시오.

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();
    }
}
.

}

유사한 방식으로 우리는 필터를 부두와 저지와 함께 삽입해야합니다.이것이 당신을 완전히 사용할 수 있기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top