java ibatis 动态注入_ibatis动态传入表名造成的SQL注入的解决方案(摘录的)

如何解决动态数据表名,动态字段名情况下,由

ibatis

缓存

select

字段而引起的

字段找不到的情况?以下是最简单的解决办法!

当使用动态表,动态字段时,会引起字段名的缓存,以下是解决办法。

先看一个例子。下面是段

SQL

语句

id="select_resData_bycondition"

parameterClass="java.util.HashMap"

resultClass="java.util.HashMap" remapResults="true" >

select $fieldnames$ from $resourcetable$ where 1=1

前台传入的

hashmap

变量中,有动态数据表名,及字段名,

Dao

里面的调用方法如下:

//

根据动态数据表名及动态选择的字段按条件分页查出相应的数据

,

注意清除缓存的使

public void getResDataByCondition(Page page) {

// TODO Auto-generated method stub

super

.queryForListPagination("select_resData_bycondition",

page);

}

父类的

queryForListPagination

如下:其中

page

这个变量是对

dataset

进行一些

封装,对查询条件封装。

public

void

queryForListPagination(String

statementName,Page

page){

.

}

由于多个菜单会调用到这个

dao

中的

getResDataByCondition

方法,也就去调用

Id

select_resData_bycondition

select

语句,由于

ibatis

的缓存机制,

当第一次调用这个

select

语句时,会将字段查询出来,放入缓存中,比如第一个表

user

人员表,有字段

gh,name,gz

等字段,则第二次调用时,前台传入了表名是

Dwbm

部门表,有字段

bmbm,bmmc

等,看了

ibatis

的源码,知道

ibaits

中缓存列名的地方在这里:

com.ibatis.sqlmap.engine.mapping.result .AutoResultMap

public

synchronized

Object[]

getResults(StatementScope

statementScope, ResultSet rs)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值