广告
返回顶部
首页 > 资讯 > 后端开发 > Python >mybatis注解动态sql注入map和list方式(防sql注入攻击)
  • 844
分享到

mybatis注解动态sql注入map和list方式(防sql注入攻击)

2024-04-02 19:04:59 844人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录网上的教程我的教程(防sql注入攻击)注入Map注入List封装foreachmybatis防止sql注入的循环map写法网上的教程 配置xml 注解中写xml

网上的教程

  • 配置xml
  • 注解中写xml脚本@Select()
  • 使用Java类中的Java方法拼写sql语句(不防sql注入攻击的纯字符串拼接)

我的教程(防sql注入攻击)

注入Map

Mapper层代码


@Repository
public interface ManageMapper { 
 @SelectProvider(type = ManageProvider.class, method = "queryDevices")
 List<Map<String, Object>> queryDevices(@Param("devicetypeno") String devicetypeno, @Param("map") Map<String, Object> map);
}

Service层代码


@Service("manageService")
public class ManageServiceImpl implements ManageService {
 
 @Resource
 private ManageMapper manageMapper;
 @Override
 public List<Map<String, Object>> queryDevices(String devicetypeno) {
  HashMap<String, Object> map = new HashMap<>();
  map.put("1-1", "1800");
  map.put("1-2", "1854");
  return manageMapper.queryDevices(devicetypeno, map);
 }
}

SqlProvider代码


public class ManageProvider {
 
 public String queryDevices() {
  String sql = new SQL()
    .SELECT("TERMINALNUM, ORGCODE, DEVICETYPENO, DEVICENAME")
    .FROM("S_DEVICE_INFO")
    .WHERE("DEVICETYPENO = #{devicetypeno}")
    .WHERE("ORGCODE IN (#{map.1-1}, #{map.1-2})")
    .toString();
  return sql;
 }
}

注入List

Mapper层代码


@Repository
public interface ManageMapper {
 @SelectProvider(type = ManageProvider.class, method = "queryDevices")
 List<Map<String, Object>> queryDevices(@Param("devicetypeno") String devicetypeno, @Param("list") List<Object> list);
}

Service层代码


@Service("manageService")
public class ManageServiceImpl implements ManageService { 
 @Resource
 private ManageMapper manageMapper;
 @Override
 public List<Map<String, Object>> queryDevices(String devicetypeno) {
  ArrayList<Object> list = new ArrayList<>();
  list.add("1800");
  list.add("1854");
  return manageMapper.queryDevices(devicetypeno, list);
 }
}

SqlProvider代码


public class ManageProvider {
 public String queryDevices(Map<String, Object> params) {
//  String sql = new SQL()
//    .SELECT("TERMINALNUM, ORGCODE, DEVICETYPENO, DEVICENAME")
//    .FROM("S_DEVICE_INFO")
//    .WHERE("DEVICETYPENO = #{devicetypeno}")
//    .WHERE("ORGCODE IN (#{list[0]}, #{list[1]})")
//    .toString();
//  return sql;
 
  @SuppressWarnings("unchecked")
  List<Object> list = (List<Object>) params.get("list");
  StringBuilder inBuilder = new StringBuilder();
  for (int i = 0, size = list.size(); i < size; i++) {
   if (i == 0) {
    inBuilder.append("(").append("#{list[").append(i).append("]}");
   } else if (i == size - 1) {
    inBuilder.append(", ").append("#{list[").append(i).append("]}").append(")");
   } else {
    inBuilder.append(", ").append("#{list[").append(i).append("]}");
   }
  }
  SQL sql = new SQL()
     .SELECT("TERMINALNUM, ORGCODE, DEVICETYPENO, DEVICENAME")
     .FROM("S_DEVICE_INFO")
     .WHERE("DEVICETYPENO = #{devicetypeno}");
  if (inBuilder.length() > 0) {
   sql.WHERE("ORGCODE IN " + inBuilder);
  }
  return sql.toString();
 }
}

封装foreach

像xml foreach标签一样使用foreach方法

请看mybatis注解动态sql中foreach工具方法

mybatis防止sql注入的循环map写法


<foreach collection="condition.keys" item="k" separator="and"> 
<if test="null != condition[k]"> 
${k} = #{condition[${k}]}
</if>
</foreach>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: mybatis注解动态sql注入map和list方式(防sql注入攻击)

本文链接: https://www.lsjlt.com/news/158777.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mybatis注解动态sql注入map和list方式(防sql注入攻击)
    目录网上的教程我的教程(防sql注入攻击)注入Map注入List封装foreachmybatis防止sql注入的循环map写法网上的教程 配置xml 注解中写xml...
    99+
    2022-11-12
  • 什么是SQL注入攻击,解释如何防范SQL注入攻击?
    1、什么是SQL注入攻击,解释如何防范SQL注入攻击。 SQL注入攻击是一种常见的网络攻击方式,攻击者通过在Web应用程序的查询语句中插入恶意代码,从而获取数据库中的敏感信息或者执行其他恶意操作。 为了防范SQL注入攻击,可以采取以下措施:...
    99+
    2023-08-30
    sql 数据库 面试
  • MyBatis下SQL注入攻击的3种方式
    目录前言Mybatis框架下易产生SQL注入漏洞的情况主要分为以下三种:1、模糊查询2、in 之后的多个参数3、order by 之后二、实战思路三、总结前言 SQL注入漏洞作为WE...
    99+
    2022-11-12
  • 防止SQL注入攻击的方法
    小编给大家分享一下防止SQL注入攻击的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! SQL注入是一种注入攻击,可...
    99+
    2022-10-18
  • 如何防止xss和sql注入攻击
    防止xss和sql注入攻击的通用方法:php防sql注入和xss攻击通用过滤如下:function string_remove_xss($html) {preg_match_all("/\...
    99+
    2022-10-17
  • mybatis动态表名怎么防止SQL注入
    要防止 MyBatis 中的 SQL 注入,可以通过以下方式来动态构建表名:1. 在 Mapper 接口中使用 @Param 注解传...
    99+
    2023-09-29
    mybatis SQL
  • sql注入攻击的防范方法有哪些
    今天小编给大家分享一下sql注入攻击的防范方法有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解...
    99+
    2022-12-27
    sql
  • 如何理解sql注入和xss攻击
    SQL注入攻击是指通过构建特殊的输入作为参数传入Web应用程序,一般是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作;而Xss攻击称为跨站脚本攻击,它是一种经常出现在web应用中的计算机安全漏洞,因Web应用程序对用户的...
    99+
    2022-10-12
  • 带你理解什么是sql注入攻击、xss攻击和cors攻击
    目录SQL注入SQL注入攻击的总体思路:SQL注入攻击实例:如何应对:XSS攻击非持久 XSS攻击:解决的具体方案:CORS攻击简单请求:非简单请求:SQL注入 SQL注入就是通过把...
    99+
    2023-05-16
    sql注入攻击 xss攻击 cors攻击
  • 网站漏洞修复方案防止SQL注入攻击漏洞
    SQL注入漏洞在网站漏洞里面属于高危漏洞,排列在前三,受影响范围较广,像asp、.net、PHP、java、等程序语言编写的代码,都存在着sql注入漏洞,那么如何检测网站存在sql注入漏洞? SQL注入漏洞测试方法 在程序代码里不管是g...
    99+
    2023-06-04
  • Mybatis注解方式完成输入参数为list的SQL语句拼接方式
    目录Mybatis注解完成输入参数为list的SQL语句拼接拼接查询条件为list集合的sql函数Mybatis注解完成输入参数为list的SQL语句拼接 首先将list集合拼接成一...
    99+
    2022-11-12
  • 【Django | 安全防护】CSRF跨站伪请求和SQL注入攻击
    🤵‍♂️ 个人主页: @计算机魔术师 👨‍💻 作者简介:CSDN内容合伙人,全栈领域优质创作者。 🌐 推荐一款找工作神器网站: ...
    99+
    2023-09-06
    django 安全 csrf 后端 python
  • MyBatis在注解上使用动态SQL方式(@select使用if)
    目录MyBatis在注解上使用动态SQL1、用script标签包围2、用Provider去实现SQL拼接3、说明MyBatis xml注释SQL的注意事项注意事项MyBatis在注解...
    99+
    2022-11-13
  • 如何使用Mybatis注解方式完成输入参数为list的SQL语句拼接方式
    这篇文章给大家分享的是有关如何使用Mybatis注解方式完成输入参数为list的SQL语句拼接方式的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Mybatis注解完成输入参数为list的SQL语句拼接首先将lis...
    99+
    2023-06-21
  • MyBatis @Select注解介绍:基本用法与动态SQL拼写方式
    目录1、@Select注解基本用法2、@Select注解动态SQL拼写@Select动态参数参考1、@Select注解基本用法 @Select注解的目的是为了取代xml中的...
    99+
    2022-11-13
  • 深入Android中BroadcastReceiver的两种注册方式(静态和动态)详解
    今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式。 BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是...
    99+
    2022-06-06
    静态 动态 Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作