zoukankan      html  css  js  c++  java
  • Dubbo添加Filter过滤器

    使用场景

    在使用Dubbo的过程中,我们有时需要做一些过滤拦截的操作,比如字符编码、黑名单等,这时可以使用过滤器来处理。

    Filter过滤器

    Dubbo 使用Filter,需要实现Filter接口,重写方法。
    注意,引入的Filter是com.alibaba.dubbo.rpc包的。

    示例如下:

    import com.alibaba.dubbo.rpc.*;
    
    public class ContextFilter implements Filter {
        private static final Logger logger = LoggerFactory.getLogger(ContextFilter.class);
    
        @Override
        public Result invoke(Invoker<?> invoker, Invocation invocation)  {
            try {
                //获取request请求
                HttpServletRequest request=  (HttpServletRequest)RpcContext.getContext().getRequest();
                //设置字符编码,也可以是其他的内容
    	    request.setCharacterEncoding("UTF-8");
    
            } catch (UnsupportedEncodingException e) {
                logger.error("ContextFilter error.", e);
            }
    
            return invoker.invoke(invocation);
        }
    }
    
    

    配置Filter

    在这个路径下 src/main/resources/META-INF 添加文件夹,名称为 dubbo,
    在dubbo文件夹下添加一个文件(注意,这个是文件),名称为 com.alibaba.dubbo.rpc.Filter 。

    变量名随意取,值为Filter类的路径 ,如下 :

    charFilter=com.service.filter.ContextFilter
    

    使用Filter

    在dubbo配置文件中的 <dubbo:service />里面,添加 Filter属性。如下:
    <dubbo:service /> 用于暴露服务。添加filter就可以进行过滤了,对应的值为 com.alibaba.dubbo.rpc.Filter文件中的变量名。

    <bean class="com.service.impl.UserServiceImpl" id="userService"/>
    <dubbo:service document="userServiceCofiguration" interface="com.service.UserService" protocol="rest" ref="userService" filter="charFilter"/>
    

    添加filter属性后,就可以使过滤器生效了。

  • 相关阅读:
    人生的意义:
    instancetype和id的区别,objective-c
    iOS多线程系统整理 swift
    系统整理 精讲 swift 泛型
    swift学习笔记7
    swift学习笔记6
    swift学习笔记5
    [iOS开发日记]简易计算器
    [ocUI日记]UIImage和UIImageview
    [ocUI日记]UIwindow和UIview
  • 原文地址:https://www.cnblogs.com/expiator/p/14557091.html
Copyright © 2011-2022 走看看