Domanda

Non riesco a ottenere il filtro della mia richiesta innescato.Eseguo Jetty 9.1 come server incorporato.

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

Ho registrato questa classe nel ResourceConfig, ha anche provato a registrare il pacchetto.È appena ignorato.È un bug, o mi manca qualcosa?

Ecco come iniziamo il molo:

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 estende ResourceConfig e chiama this.package(...) e this.register(MyFilter.class) nel costruttore.

È stato utile?

Soluzione

Il problema è che la classe che definisce l'endpoint di riposo non può essere istanziata perché - nel mio caso - l'istanziazione dipende dalle cose che devono essere impostate nel filtro di richiesta.

Tuttavia, la classe endpoint è instanciata prima viene chiamato il filtro.Per prima cosa eseguire il filtro, deve essere annotato @PreMatching.

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

Altri suggerimenti

Per abilitare le richieste di cross-origin in un file jar di jetty autonomo con Jersey Pest Services (per consentire chiamate da Swagger-UI).Crea una classe Corsesponsefilter:

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

}

e lo fa riferimento nella tua classe di app principale:

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

}

Per il modo simile dobbiamo incorporare il filtro con il molo e il jersey.Spero che questo utilizzerà pieno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top