mybatis interceptor 处理查询参数及查询结果


/**
* 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) {

}
}


添加配置:



<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>


 

0 个评论

要回复文章请先登录注册