最近在研究dubbo的权限验证功能,这里要用到dubbo的filter,于是在网上查询有关资料,但各种版本的都有,遇到很多坑,
比如通过注解@Activate的方式来实现激活条件和时机(下面这段表示如果方法是服务提供者,就会先激活filter,等执行完filter以后才执行后面被调用的服务方法)
@Activate(group = "provider")
public class TestDubboFilter implements Filter {
@Override
public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
System.out.println("TestDubboFilter1111111");
Result result = null;
result = invoker.invoke(invocation);
return result;
}
}
或者通过配置xml的方式
<dubbo:provider filter="testDubboFilter"></dubbo:provider>
其实这2中方式只要配一种就行了,不需要2种都配,有些文章不知道哪里抄来的,竟然同时用了注解和xml配置的方式,把我带进了坑里。
最后,我总结一下dubbo用filter的几个关键步骤
1.写一个实现类继承Filter接口
2.在这个类上面写上注解@Activate(参数可以根据业务来自己定义)
3.在src/main/resources/METE-INF/dubbo/目录下添加一个文件,文件名是com.alibaba.dubbo.rpc.Filter,这个是固定写法,dubbo框架会到这个目录里查找这个文件的,这个文件里把刚才那个实现类的包名加类名写进去,比如
testDubboFilter=com.test.filter.TestDubboFilter
4.在启动类里面别忘记扫描这个类的目录@EnableDubbo(scanBasePackages = "com.test.filter")