我的应用程序我们计划将Wire-tap作为Async调用,但是我们在SecurityContext中设置了一些登录信息,因此如果我们将Wire-tap作为Async,我们将丢失这些数据,因此我们计划使用Synch Channel for Wire -tap和我们记录时在Interceptor类中调用一个Thread来记录DB中的消息。
这种方法的影响可能是我们需要注意什么线程轮询限制,还是有替代解决方案呢?
我们正在使用weblogic 12c
答案 0 :(得分:0)
看起来您应该注意SecurityContext propagation
(https://jira.spring.io/browse/INT-2166)。请仔细阅读所有这些评论。
您可以添加ChannelInterceptor
wire-tap
频道的SecurityContext
,该单独的广告将获得interceptor
。
要获得全面的答案,我在这里添加class SecurityContextPropagationChannelInterceptor extends ChannelInterceptorAdapter {
@Override
Message<?> preSend(Message<?> message, MessageChannel channel) {
if (!(channel in AbstractPollableChannel) || message.headers.securityContext || !SecurityContextHolder.context.authentication) return message
return MessageBuilder.fromMessage(message).with {
setHeader 'securityContext', SecurityContextHolder.context
build()
}
}
@Override
Message<?> postReceive(Message<?> message, MessageChannel channel) {
if (channel in AbstractPollableChannel && message.headers.securityContext) {
SecurityContextHolder.context = message.headers.securityContext
}
return message
}
}
代码:
{{1}}