gpt4 book ai didi

java - CXF 中的拦截器不会按照添加到拦截器的顺序调用

转载 作者:行者123 更新时间:2023-11-30 04:04:52 26 4
gpt4 key购买 nike

我有两个手动拦截器:

public class MyServiceLoggingInInterceptor extends LoggingInInterceptor {   

@Override
public void handleMessage(Message message) throws Fault {
super.handleMessage(message);
}

public class InterceptorTest extends AbstractAuthorizingInInterceptor {


@Override
public void handleMessage(Message message) throws Fault {
System.out.println("Yes! handle message in InterceptorTest");

}}

更改将拦截器添加到链中的顺序不会更改拦截器调用,并且始终首先调用 MyServiceLoggingInInterceptor。

server.getInInterceptors().add(new LoggingInInterceptor());
server.getInInterceptors().add(new MyServiceLoggingInInterceptor());

CXF拦截器有层次结构吗?或者为了有一个特定的订单,我应该做一些其他的事情+

谢谢!

最佳答案

CXF 拦截器有一个阶段可以帮助确定它们插入到进程中的哪个位置。

检查this页面以查看入站和出站阶段的顺序。

在您的 LoggingInInterceptor 示例中,看一下,您会发现它至少有两个构造函数:

public LoggingInInterceptor() {
super(Phase.RECEIVE);
}

public LoggingInInterceptor(String phase) {
super(phase);
}

您正在使用第一个,这意味着您处于接收阶段。 AbstractAuthorizingInInterceptor 处于 PRE_INVOKE 阶段,也就是之后的阶段,因此 Logging 拦截器总是会在之前被调用。

如果你想改变这一点,你需要改变拦截器的阶段。如果两个拦截器处于同一阶段,那么它们添加的顺序很重要。

关于java - CXF 中的拦截器不会按照添加到拦截器的顺序调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20997346/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com