aop 切面

applicationContext.xml

配置切面,扫描Service下所有的类

<!-- 切面 -->
    <bean id="dataIllegal" class="com.golden.msale.framework.aop.DataIllegalAop" />  
      <!-- 配置AOP -->  
      <aop:config>  
        <!-- 定义全局的pointcut,所有的代理过滤条件都参照此pointcut -->  
        <aop:pointcut expression="execution(* com.golden.msale.service..*.*(..))" id="daoPointcut"/>  
        <!-- 把标准Bean与AOP-aspect做关联,标准Bean就成为具有aspect(切面织入)功能的Bean -->  
        <aop:aspect id="dataSourceAspect" ref="dataIllegal">  
              <aop:around method="doAround" pointcut-ref="daoPointcut"/>  
        </aop:aspect>  

      </aop:config>


要执行的方法

public class DataIllegalAop {
    
    @SuppressWarnings("unchecked")
    public Object doAround(ProceedingJoinPoint joinPoint){
        if(joinPoint.getArgs()[0] instanceof String){
            joinPoint.getArgs()[0] = clearXss(joinPoint.getArgs()[0].toString());
        }else{
            Map<String,Object> param = (Map<String,Object>)joinPoint.getArgs()[0];
            Iterator<Entry<String, Object>> it = param.entrySet().iterator();
            while(it.hasNext()){
                Entry<String, Object> itEntry = it.next();
                String paramValue =itEntry.getValue().toString();
                if(paramValue.indexOf("select") > -1
                            ||paramValue.indexOf("delete") > -1
                                  ||paramValue.indexOf("update") > -1
                                      ||paramValue.indexOf("insert") > -1
                                          ||paramValue.indexOf("drop") > -1
                                              ||paramValue.indexOf("exec") > -1){
                        return -3;
                }
                itEntry.setValue(clearXss(paramValue));//修改值
            }
        }
        try {
            Object obj = joinPoint.proceed();//调用执行目标方法
            return obj;
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        return -3;
    }

    
    // 清除路径中的转义字符
    private String clearXss(String value) {

        if (value == null || "".equals(value)) {
            return value;
        }

        value = value.replaceAll("<", "&lt;").replaceAll(">", "&gt;");
        value = value.replaceAll("\\(", "&#40;").replace("\\)", "&#41;");
        value = value.replaceAll("'", "&#39;");
        value = value.replaceAll("eval\\((.*)\\)", "");
        value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']",
                "\"\"");
        value = value.replace("script", "");

        return value;
    }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值