Pergunta

Eu sou incapaz de receber meu pedido filtro acionado.Eu corro jetty 9.1 como um servidor embutido.

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

Eu registrei essa classe no ResourceConfig, também tentou registrar o pacote.É simplesmente ignorado.É um bug, ou eu estou faltando alguma coisa?

É assim que eu iniciar o 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 se estende ResourceConfig e chamadas this.package(...) e this.register(MyFilter.class) no construtor.

Foi útil?

Solução

O problema é que a classe que define o RESTO ponto de extremidade não pode ser instanciado, porque, no meu caso - a instanciação depende de coisas que deve ser configurado na solicitação do filtro.

No entanto, o ponto de extremidade de classe é instanciated antes de o filtro é chamado.Para executar o filtro de primeira, tem que ser anotada @PreMatching.

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

Outras dicas

Para activar a origem de pedidos em um auto-contido Jetty arquivo jar com Jersey serviços REST (para permitir chamadas de Bazófia-UI).Criar um CORSResponseFilter classe:

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 a referência a ele em seu principal classe do Aplicativo:

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

}

Por semelhante modo a incorporar o filtro com jetty e jersey.espero que este vai usar completa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top