我正在处理一个需要调用“身份验证”方法的Web服务,并且返回的令牌放在一个特殊的标头中,以便每次都执行下一个操作。尝试在CXF拦截器中执行此操作似乎是合乎逻辑的。我会看到它的工作原理
将CXF客户端对象注入业务逻辑对象。 BusinessLogic对象调用操作A.拦截器确定需要首先调用操作B并调用操作B,然后将标头添加到原始调用A,然后将其传出。
显然,以原子方式或潜在递归方式执行此操作是有意义的(如果Interceptor知道对Op B的调用传递通过)。我想避免的丑陋,黑客的方式是让Interceptor对服务有循环依赖。我还想避免丑陋的hackish方式基本上站起来两个客户objs和一个拦截,而另一个没有。看起来应该有一些方法可以做到这一点,事实上我知道Service类有一个方法调度程序,但我不知道如何调用将导致传出调用的操作。
答案 0 :(得分:0)
我意识到这是一个非常古老的问题,@ jcalvert很久以来就已经达成了解决方案或其他职业。
乍一看,我质疑在拦截器链中执行I / O的智慧,其中在失败时传播有意义的信息可能是一个挑战,更不用说在每次操作时都必须重新验证的效率低下。
是的,可以创建一个状态完全拦截器,它可以维护有效的会话令牌,但客户端必须有一个“注销”操作来处理该关联。
我的第一个建议是处理应用层的情况:改变客户端的接口,使每个操作都需要一个授权令牌。如果不存在,Web服务将获取一个并在所有操作中返回它。