2017-01-23 115 views
1

我試圖使用spring-cloud-sleuth來跟蹤由spring-security-oauth發起的https請求。如何使用spring-cloud-sleuth跟蹤spring-security-oauth活動?

但我堅持認爲spring-security-oauth過濾器OAuth2AuthenticationProcessingFilter在spring-cloud-sleuth過濾器TraceFilter之前執行。

這是否可以更改,以便在spring-security-oauth過濾器之前處理spring-cloud-sleuth過濾器?

版本信息:

  • 春天開機:1.3.5
  • 彈簧雲:Brixton.SR3
  • 彈簧雲偵探:1.0.3
  • 彈簧安全的oauth2 :2.0.9

更新:根據下面我可以解決在p建議 通過定義自己FilterRegistrationBean爲roblem:

@Inject 
TraceFilter traceFilter; 

@Bean 
public FilterRegistrationBean myTraceFilter() { 
    LOG.info("Register a TraceFilter with HIGHEST_PRECEDENCE"); 
    FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(traceFilter, new ServletRegistrationBean[0]); 
    filterRegistrationBean.setDispatcherTypes(ASYNC, new DispatcherType[]{ERROR, FORWARD, INCLUDE, REQUEST}); 
    filterRegistrationBean.setOrder(Ordered.HIGHEST_PRECEDENCE); 
    return filterRegistrationBean; 
} 

回答

1

您可以自己註冊TraceFilter和手動提供訂單。試着把它放在彈簧安全過濾器之前。如果工作正常,您可以提交描述整個流程的PR /問題,以便我們繼續討論。

+0

感謝您的快速響應! 你的意思是使用FilterRegistrationBean,如: @Bean 公共FilterRegistrationBean getSleuthTraceFilterRegistrationBean(){ FilterRegistrationBean豆=新FilterRegistrationBean(); bean.setFilter(new TraceFilter(...)); bean.setOrder(1); bean.addUrlPatterns(「/」); return bean; } 但我怎麼創建TraceFilter,它的構造需要大量的,我不知道該怎樣在:-) 填寫線索,或者有我錯過了一些其他註冊TraceFilter簡單的方法的詳細信息? –

+0

對不起,評論混亂!你的意思是使用'FilterRegistrationBean'?但是如何創建'TraceFilter'對象?它的構造函數需要很多細節......還是有更簡單的方法來註冊TraceFilter? –

+0

在這裏,您有2個負責註冊的bean - https://github.com/spring-cloud/spring-cloud-sleuth/blob/master/spring-cloud-sleuth-core/src/main/java/org/ springframework/cloud/sleuth/instrument/web/TraceWebAutoConfiguration.java#L98我不確定它是否能夠正常工作,但是顯然可以重用bean並嘗試以相同的方式以更高的順序註冊它。 'TraceFilter'已經是一個bean - 你可以注入它。 –