2017-01-23 69 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 - 你可以注入它。 –