Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java CXF客户端拦截器总是先调用另一个方法吗?_Java_Authentication_Cxf_Webservice Client - Fatal编程技术网

Java CXF客户端拦截器总是先调用另一个方法吗?

Java CXF客户端拦截器总是先调用另一个方法吗?,java,authentication,cxf,webservice-client,Java,Authentication,Cxf,Webservice Client,我正在处理一个web服务,它需要调用一个“身份验证”方法,并将返回的令牌放在一个特殊的头中,以便每次执行下一个操作。在CXF拦截器中尝试这样做似乎是合乎逻辑的。我会把它看作是一种工作方式 将CXF客户端对象注入到业务逻辑对象中。BusinessLogic对象调用操作A。拦截器确定需要首先调用操作B并调用Op B,然后将标头添加到原始调用A中,然后将其传出 显然,以原子方式或潜在的递归方式执行此操作是有意义的(如果拦截器知道对Op B的调用是通过的)。我希望避免的一种丑陋、粗俗的方式是让拦截器对服

我正在处理一个web服务,它需要调用一个“身份验证”方法,并将返回的令牌放在一个特殊的头中,以便每次执行下一个操作。在CXF拦截器中尝试这样做似乎是合乎逻辑的。我会把它看作是一种工作方式

将CXF客户端对象注入到业务逻辑对象中。BusinessLogic对象调用操作A。拦截器确定需要首先调用操作B并调用Op B,然后将标头添加到原始调用A中,然后将其传出


显然,以原子方式或潜在的递归方式执行此操作是有意义的(如果拦截器知道对Op B的调用是通过的)。我希望避免的一种丑陋、粗俗的方式是让拦截器对服务具有循环依赖性。我还想避免那种丑陋的黑客方式,即站在两个客户端对象上,一个被截获,另一个不被截获。看起来应该有办法做到这一点,而且我确实知道服务类有一个方法分派器,但我不知道如何调用将导致传出调用的操作

我意识到这是一个非常古老的问题,@jcalvert早就找到了解决方案或另一种职业

乍一看,我怀疑在拦截器链中执行I/O是否明智,在失败时传播有意义的信息可能是一个挑战,更不用说必须在每个操作上重新验证的低效性了

是的,可以创建一个状态完整的拦截器来维护有效的会话令牌,但是客户端必须进行“注销”操作来处理关联

我的第一个建议是在应用层处理这种情况:改变客户端的接口,使每个操作都需要一个授权令牌。如果不存在,web服务将获得一个并在所有操作中返回它