我目前正在使用Spring Integration从队列中获取消息,并使用服务激活器将它们发送到服务。我的问题是我调用的服务需要为当前线程安装一个安全上下文。这可以通过调用另一个bean的无参数方法handleAuthentication()来设置。我想知道在调用服务激活器服务之前,每当收到新消息时,最好的方法是调用它吗?我原本以为我会将两个服务激活器链接在一起,第一个调用handleAuthentication(),但这似乎不正确,因为handleAuthentication()不需要实际消息中的任何信息。
答案 0 :(得分:1)
是的,您对安全处理的假设是正确的。它实际上只是一个副作用方面,不应该与业务逻辑联系在一起。
因此,我们应该使用允许我们在程序中遵循相同行为的东西。它在编程中也被称为Aspect
。
为此,Spring Integration建议使用MessageChannelInterceptor
之类的钩子,根据您的解释,您可以在handleAuthentication()
回调中完全实现preReceive()
。
使用<request-handler-advice-chain>
和MethodInterceptor
实现可以实现另一个技巧,该实现应该在目标服务调用之前将SecurityContext
填充到当前线程中。