2015-11-30 126 views
0

繼之前執行的過程是我所創建的路線 -Apache的駱駝 - 每個路由

from("jetty:http://localhost:8181/abc").routeId("abc").choice() 
      // Authenticate the request 
      .when(authenticator).endChoice() 
      // Authorize the request 
      .when(authorizer).endChoice() 
      // Validate the request 
      .when(abcValidator).endChoice() 
      .otherwise() 
      .process(abcRequestProcessor).process(storeFeatureRequestDetails).process(featureRequestApproverUpdater).split(body()).process(abcApproverMailer).to("direct:toMail"); 

上述路線的功能,但我不想認證和授權的步驟添加到每一個路線。有沒有一種方法可以將它們配置爲在每條路線之前運行。

我嘗試以下 -

from("jetty:http://localhost:8181/*").process(new Processor() { 
     @Override 
     public void process(Exchange exchange) throws Exception { 
      System.out.println("Triggered"); 
     } 
    }); 

但它看起來完全匹配。

回答

1

你可以使用這個駱駝interceptor API ...

// intercept all incoming routes and log it 
interceptFrom().process(new Processor() { 
    @Override 
    public void process(Exchange exchange) throws Exception { 
     System.out.println("Triggered"); 
    } 
}); 
0

如果你不想把AAA放在每一條路徑上,爲什麼不提取它們的功能並把它們放在不同的路由中並在路由中調用它們?示例代碼:

from("jetty:http://localhost:8181/abc").routeId("abc").choice() 
      // Authenticate the request 
      .to("direct:authenticator") 
      // Authorize the request 
      .to("direct:authorizer") 
      // Validate the request 
      .to("direct:abcValidator")    
      .process(abcRequestProcessor).process(storeFeatureRequestDetails).process(featureRequestApproverUpdater).split(body()).process(abcApproverMailer).to("direct:toMail"); 

基本上驗證器現在處於單獨的路由。你可以通過「direct:authenticator」來調用它。授權和驗證也是如此。

這樣,如果您有其他需要使用此功能的路由,則只需調用AAA路由。

+0

或多或少相同。我們仍然需要添加to的。不要我們有像struts中可用的攔截器。 – user1305398

+0

搜索網站,你可以找到有關攔截器的信息 - 駱駝頭版上有一個搜索框。 –