mysql和mogodb特殊字符转义

描述: 页面如果在查询输入框中输入特殊字符, 可能会对数据库查询有影响, 后端可能会报异常, 需要前端对请求参数加码, 后端接口对请求参数解码, 后端并对查询参数特殊字符转义处理

import org.springframework.util.ObjectUtils;
public class BaseStringUtil {
private BaseStringUtil() {
}

public static String escapeChar(String before) {
if (!ObjectUtils.isEmpty(before)) {
before = before.replace("/", "//");
before = before.replace("_", "/_");
before = before.replace("%", "/%");
}
return before;
}

public static String escapeQueryChars(String s) {
if (ObjectUtils.isEmpty(s)) {
return s;
} else {
StringBuilder sb = new StringBuilder();
for(int i = 0; i < s.length(); ++i) {
char c = s.charAt(i);
if (c == '\\' || c == '+' || c == '-' || c == '!' || c == '(' || c == ')' || c == ':' || c == '^' || c == '[' || c == ']' || c == '"' || c == '{' || c == '}' || c == '~' || c == '*' || c == '?' || c == '|' || c == '&' || c == ';' || c == '/' || c == '.' || c == '$' || Character.isWhitespace(c)) {
sb.append('\\');
}
sb.append(c);
}
return sb.toString();
}
}
}


import cn.hutool.core.net.URLDecoder;
import com.alibaba.fastjson.JSON;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Map;

public class ParamsUtil {
private ParamsUtil() {
// 工具类私有构造方法
}

/**
* mongodb解码
* @param value
* @return
*/
public static String mongodbDecode(String value) {
if (StringUtils.isEmpty(value)) {
return value;
}
String s = URLDecoder.decode(value, Charset.defaultCharset());
return BaseStringUtil.escapeQueryChars(s);
}

/**
* mysql解码
* @param value
* @return
*/
public static String mySqlDecode(String value) {
if (StringUtils.isEmpty(value)) {
return value;
}
String s = URLDecoder.decode(value, Charset.defaultCharset());
return BaseStringUtil.escapeChar(s);
}
}

复制代码
@RestController
@RequestMapping("/api/search/adGroup")
public class AdGroupController implements AdGroupApi {
    @GetMapping("/export")
    @Override
    public void export(
                     @RequestParam(required = false, name = "adGroup")
                     String adGroup) {
        adGroup = ParamsUtil.mySqlDecode(adGroup);
    }
}


// mysql查询时对特殊字符转义
public PageResult<GroupResultDto> listByGroupName(String groupName) {
     List<Group> groupList = groupMapper.listByGroupName(BaseStringUtil.escapeChar(groupName));
}


public interface GroupMapper {
    List<Group> listByGroupName(@Param("groupName") String groupName);
}
复制代码

 

 
<select id="listByGroupName" parameterType="java.lang.String" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from cmd_group
where del_flag = 0
<if test="groupName != null and groupName != ''">
and group_name like concat('%', #{groupName}, '%') escape '/'
</if>
order by update_time desc
</select>

posted @   剑阁丶神灯  阅读(340)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示