自定义dubbo过滤器
- 实现dubbo提供的Filter
public class VaildationFilter implements Filter { @Override public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException { Properties properties = new Properties(); InputStream inputStream = VaildationFilter.class.getResourceAsStream("/ipwhitelist.properties"); //获取客户端ip String remoteHost = RpcContext.getContext().getRemoteHost(); try { properties.load(inputStream); String ipwhitelist = properties.getProperty("ipwhitelist"); if(ipwhitelist.contains(remoteHost)){ return invoker.invoke(invocation); }else{ return new RpcResult(new Exception("ip地址:"+remoteHost+"没有访问权限")); } }catch (Exception e){ }finally { if(inputStream != null){ //inputStream.close(); } } return null; }
}
2. 从dubbo中的ExtensionLoader类中可以发现,spi加载的目录有三个
在DUBBO_INTERNAL_DIRECTORY这个目录下面有com.alibaba.dubbo.rpc.Filter这个文件这个文件中定义了很多过滤器,可以根据需要去覆盖。
我上面的代码是重写了validation,在resources文件夹下面建立MEAT-INF/dubbo/internal文件夹(千万不要MEAT-INF.dubbo.internal这样去建立,我这样建被坑了好久。。。。),在这个文件夹下面添加一个文件:com.alibaba.dubbo.rpc.Filter,
3. 在dubbo的配置文件中增加配置(我只修改了服务提供者的配置文件)