模糊搜索搜%出现全部数据问题,用AOP方式解决

1 searchContent= URLDecoder.decode(searchContent.replaceAll("%(![0-9a-fA-F]{2})","%25"),"UTF-8"); //这里是将encode后的%和手动输入的%做区分,把手动输入的%替换成%25
2 searchContent=searchContent.replace("%","#%"); //这里#是自己设置的转义符
3 and (pubComNm like '%${searchContent}%' or personalName like '%${searchContent}%' escape '#') //这里是sql语句

AOP方式:
配置切面类
package com.seeyii.base.interceptor;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.CodeSignature;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.stereotype.Component;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.Collections;
import java.util.List;

@Aspect
@Component
public class ParamHandler {

    @Pointcut("execution( * com.seeyii.web.uncompanys.controller..*(..))")
    public void pointCut() {

    }

    @Around("pointCut()")
    public Object around(ProceedingJoinPoint joinPoin) throws UnsupportedEncodingException {
 //处理模糊搜索%匹配所有问题
        //参数值
        Object [] values = joinPoin.getArgs();
        //参数名
        String[] names = ((CodeSignature) joinPoin.getSignature()).getParameterNames();
        for(int i=0;i<names.length;i++){
          if(names[i].equals("searchContent")){
              System.out.println("AOP前"+values[i]);
              values[i]=  URLDecoder.decode(values[i].toString().replaceAll("%(![0-9a-fA-F]{2})","%25"),"UTF-8").replace("%","#%");
              System.out.println("AOP后"+values[i]);
              break;
          }
        }
        Object obj = null;
        try {
//重新设置参数值
            obj = joinPoin.proceed(values);
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        return obj;
    }
}

 

posted @ 2022-04-19 15:07  杨吃羊  阅读(227)  评论(0)    收藏  举报