2017-02-14 3 views
0

クライアントコールの前後にリクエストをインターセプトしたいと思います。どのようにCXF Jaxrsにフィルターを接続できますか?

は考える:

Form formData = new Form(); 
    formData.param("grant_type", "client_credentials"); 

    List<Object> providers = new ArrayList(); 
    providers.add(new GsonMessageBodyProvider()); 
    providers.add(new RestLogger()); <--doesn't work 

    WebClient client = WebClient.create("https://blah.com", providers); 

    // sets timeouts. 
    HTTPConduit conduit = WebClient.getConfig(client).getHttpConduit(); 
    conduit.getClient().setReceiveTimeout(1000); 
    conduit.getClient().setConnectionTimeout(1000); 

    client.path("token.oauth2"); 
    client.type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).accept(MediaType.APPLICATION_JSON); 

    WebClient wc = WebClient.fromClient(client);// thread safe 
    BearerTokenResponse r = wc.post(formData, BearerTokenResponse.class); 
    System.out.println(ToStringBuilder.reflectionToString(r)); 

私は私が仕事だろうと思った。このようなクラスを書いた:

public class RestLogger implements ContainerRequestFilter, ContainerResponseFilter { 
    @Override 
    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException { 
     System.out.println("request"); 
    } 
    @Override 
    public void filter(ContainerRequestContext requestContext) throws IOException { 
     System.out.println("response"); 

    } 
} 

をしかし、それは発生しません。どんな助け?私はStormクラスタでこれを実行しているので、注釈を使用することはできません。私はプログラムでこれをフックする必要があります。私はClientRequestFilterClientResponseFilterを使用し、クライアント側の要求と応答を傍受するには3.1.10(最新)

<!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-rs-client --> 
    <dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-rs-client</artifactId> 
     <version>3.1.10</version> 
    </dependency> 
+0

私の[答え](http://stackoverflow.com/a/42378761/1426227)があなたに役立つかどうか教えてください。 –

答えて

1

を使用しています。

サーバー側で要求と応答を傍受するには、ContainerRequestFilterContainerResponseFilterを使用します。

+1

これが答えです。もちろん、間違ったインターフェースを使っていました。それをひっくり返し、それはすべて正常に動作します。補足として、インタフェースはProviderFactoryにはありませんが、そこに到達する前にリストから削除されている可能性があります。わからない。ありがとう! – markthegrea

関連する問題