栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

mybatis直接执行sql

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

mybatis直接执行sql

注意:需要手动校验sql中参数,防止sql注入

1. 注解方式

Mapper接口

@Mapper
public interface PublicSqlMapper {
    
    @Select("${sql}")
    List> select(Map map);

    
    @Insert("${sql}")
    int insert(Map map);

    
    @Update("${sql}")
    int update(Map map);

    
    @Delete("${sql}")
    int delete(Map map);
}

Controller

@Validated
@RequestMapping("/action")
@RestController
public class ActionController {
    @Autowired
    private PublicSqlMapper publicSqlMapper;

    
    @PostMapping("/selectBySql")
    public RetResult>> selectBySql(@RequestBody Map map){
        return RetModel.ok().setData(publicSqlMapper.select(map));
    }
} 

数据

上送
{
	"sql": "select * from article where author=#{author} and title like concat('%', #{title}, '%')",
	"author": "zs",
	"title": "领导"
}
返回
{
	"retCode": "0000",
	"message": "请求成功",
	"result": [
		{
			"id": 2,
			"title": "分区领导视察",
			"sub_title": null,
			"author": "zs",
			"content": "慰问员工",
			"department_id": 1,
			"check_status": "0",
			"create_time": "2021-04-30 12:00:00",
			"update_time": "2021-04-21 22:04:44"
		}
	]
}

2. 防止sql注入处理

sql注入是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,
以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息

//方法一
    public static boolean sqlValidate(String str) { 
        str = str.toLowerCase();//统一转为小写 
        String badStr = "'|and|exec|execute|insert|select|delete|update|count|drop|*|%|chr|mid|master|truncate|" + 
                "char|declare|sitename|net user|xp_cmdshell|;|or|-|+|,|like'|and|exec|execute|insert|create|drop|" + 
                "table|from|grant|use|group_concat|column_name|" + 
                "information_schema.columns|table_schema|union|where|select|delete|update|order|by|count|*|" + 
                "chr|mid|master|truncate|char|declare|or|;|-|--|+|,|like|//|/|%|#";//过滤掉的sql关键字,可以手动添加 
        String[] badStrs = badStr.split("\|"); 
        for (int i = 0; i < badStrs.length; i++) { 
            if (str.indexOf(badStrs[i]) >= 0) { 
                return true; 
            } 
        } 
        return false; 
}
//方法二
public static String checkPageSafeFilter(String str) {
		// 过大不处理
		if (StringUtils.isEmpty(str) || str.length() > 1024) {
			return str;
		}
		return str.replaceAll("(?:[sS][eE][lL][eE][cC][tT] |[uU][pP][dD][aA][tT][eE] |[dD][eE][lL][eE][tT][eE] |<\s*[sS][cC][rR][iI][pP][tT]\s*>)", "");
	}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/872456.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号