zoukankan      html  css  js  c++  java
  • mybatis interceptor 处理查询参数及查询结果

    拦截器:拦截update,query方法,处理查询参数及返回结果。

    /**
     * Created by windwant on 2017/1/12.
     */
    @Intercepts({
            @Signature(type=Executor.class,method="update",args={MappedStatement.class,Object.class}),
            @Signature(type=Executor.class,method="query",args={MappedStatement.class,Object.class,RowBounds.class,ResultHandler.class})
    })
    public class EncryptInterceptor implements Interceptor {
        public static final Logger logger = LoggerFactory.getLogger(EncryptInterceptor.class);
    
    
        @Override
        public Object intercept(Invocation invocation) throws Throwable {
            dealParameter(invocation);
            Object returnValue = invocation.proceed();
            dealReturnValue(returnValue);
            return returnValue;
        }
    
        //查询参数加密处理
        private void dealParameter(Invocation invocation) {
            MappedStatement statement = (MappedStatement) invocation.getArgs()[0];
            String mapperl = ConfigUtils.get("mybaits.mapper.path");
            String methodName = statement.getId().substring(statement.getId().indexOf(mapperl) + mapperl.length() + 1);
            if (methodName.startsWith("UserBaseMapper")){
                if(methodName.equals("UserBaseMapper.updateDriver")){
                    ((Driver) invocation.getArgs()[1]).encrypt();
                }
            }
            logger.info("Mybatis Encrypt parameters Interceptor, method: {}, args: {}", methodName, invocation.getArgs()[1]);
        }
    
        //查询结果解密处理
        private void dealReturnValue(Object returnValue){
            if(returnValue instanceof ArrayList<?>){
                List<?> list = (ArrayList<?>)returnValue;
                for(Object val: list){
                    if(val instanceof Passenger){///
                        //TODO
                    }
                    logger.info("Mybatis Decrypt result Interceptor, result object: {}", ToStringBuilder.reflectionToString(val));
                }
            }
        }
    
        @Override
        public Object plugin(Object target) {
            return Plugin.wrap(target, this);
        }
    
        @Override
        public void setProperties(Properties properties) {
    
        }
    }

    添加xml配置:

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
                  <property name="typeAliasesPackage" value="com.xx.model"/>
                  <property name="dataSource" ref="dataSource"/>
                  <!-- 自动扫描mapping.xml文件 -->
                  <property name="mapperLocations" value="classpath*:mybatis/*.xml"></property>
                  <property name="plugins">//拦截器插件
                         <array>
                                <bean class="com.github.pagehelper.PageHelper">
                                       <property name="properties">
                                              <value>dialect=hsqldb</value>
                                       </property>
                                </bean>
                                <bean class="com.xx.interceptor.EncryptInterceptor">
                                       <property name="properties">
                                              <value>property-key=property-value</value>
                                       </property>
                                </bean>
                         </array>
                  </property>
           </bean>
    

     

  • 相关阅读:
    HTTPS之acme.sh申请证书
    GoAccess日志分析工具
    KVM之CPU虚拟化
    自动化运维之PSSH
    Hadoop+HBase 集群搭建
    SSH + Google Authenticator 安全加固
    查看数据的类型(python)
    在word中,替换多个词语。正则表达式中 [] {} 是可以连用的(python)
    方差分析的前提,与检验,以及球形检验
    清屏处理(汇编)
  • 原文地址:https://www.cnblogs.com/niejunlei/p/6346610.html
Copyright © 2011-2022 走看看