栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springBoot过滤器去除请求参数前后空格

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springBoot过滤器去除请求参数前后空格

springBoot过滤器去除请求参数前后空格

在一个阳光明媚的早晨,客服小姐姐甜美的声音照常的响起:”昨天客户平台数千条用户充值失败,钱打到客户手中了,但是订单生成失败“

啊这…这……阳光逐渐暗淡,温馨的画面变成了黑白,甜美的声音也逐渐变的刺耳。脑子中出现了四个字【重大事故】

细细思索一番,昨天?? 近一周都没有了新版本上线,怎么昨天出现问题???? 带着满脑子问号冲向工位

迅速走过以下操作
  1. 不信任原则 迅速验证消息的真实性(消息属实)
  2. 查错误数据,查看数据范围,评定事故等级(还好:51条失败订单)
  3. 回复客服以及上级,说明事情已经开始处理
  4. 根据上面出错数据查询日志,定位问题
    1. 经过比对用户更改了微信参数【前面多打一个空格】
    2. 微信回调参数与数据库中保存进行比对【多一个空格必定比对不成功】
    3. 结局就是,回调失败,订单生成失败
  5. 立刻联系客户修复错误参数(保证不再扩大事故范围)
  6. 立即着手修复错误数据,保证平台运行
  7. 随后进行程序优化【即增加过滤器去除请求参数前后空格】
是时候站起来喝杯茶,客户很好说话,没有问责,没有争吵。看看窗外的天,乌云散去,阳光逐渐洒满大地,依旧是温馨和谐的日常~

随后,附上代码

每个SpringBoot项目增加过滤器(对外提供API的模块,web网站模块,微信小程序模块。。。)

import com.zy.common.xss.TrimFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FilterConfig {

    
    @Bean
    public FilterRegistrationBean trimFilter() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setDispatcherTypes(DispatcherType.REQUEST);
        registration.setFilter(new TrimFilter());
        registration.addUrlPatterns("
    @Override
    public ServletInputStream getInputStream() throws IOException {
        //非json类型,直接返回
        if(!super.getHeader(HttpHeaders.CONTENT_TYPE).equalsIgnoreCase(MediaType.APPLICATION_JSON_VALUE)){
            return super.getInputStream();
        }
        //为空,直接返回
        String json = IOUtils.toString(super.getInputStream(), "utf-8");
        if (!StringUtils.hasLength(json)) {
            return super.getInputStream();
        }
        ByteArrayInputStream bis = new ByteArrayInputStream(JsonTrimUtils.jsonTrim(json).getBytes("utf-8"));
        return new MyServletInputStream(bis);
    }
    
    public void modifyParameterValues(){
        Set set =params.keySet();
        Iterator it=set.iterator();
        while(it.hasNext()){
            String key= it.next();
            String[] values = params.get(key);
            for (int i = 0; i < values.length; i++) {
                values[i] = values[i].trim();
            }
            params.put(key, values);
        }
    }
    
    @Override
    public String getParameter(String name) {
        String[]values = params.get(name);
        if(values == null || values.length == 0) {
            return null;
        }
        return values[0];
    }
    
    @Override
    public String[] getParameterValues(String name) {//同上
        return params.get(name);
    }

    class MyServletInputStream extends  ServletInputStream{
        private ByteArrayInputStream bis;
        public MyServletInputStream(ByteArrayInputStream bis){
            this.bis=bis;
        }
        @Override
        public boolean isFinished() {
            return true;
        }

        @Override
        public boolean isReady() {
            return true;
        }

        @Override
        public void setReadListener(ReadListener listener) {

        }
        @Override
        public int read() {
            return bis.read();
        }
    }

}

工具类,去除JSON中值前后空格

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.util.Iterator;
import java.util.Map;


public final class JsonTrimUtils {
 
    
    private JsonTrimUtils() {
    }
 
    
    public static JSONObject jsonTrim(String jsonStr) {
        return jsonTrim(JSONObject.parseObject(jsonStr));
    }
 
    
    public static JSONObject jsonTrim(JSONObject jsonObject) {
        Iterator> iterator = jsonObject.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry next = iterator.next();
            Object value = next.getValue();
            if (value != null) {
                if (value instanceof String) {
                    //清空值前后空格
                    jsonObject.put(next.getKey(), ((String) value).trim());
                } else if (value instanceof JSONObject) {
                    jsonTrim((JSONObject) value);
                } else if (value instanceof JSONArray) {
                    jsonTrimArray((JSONArray) value);
                }
            }
        }
 
        return jsonObject;
    }
 
    
    private static void jsonTrimArray(JSONArray array) {
        if (array.size() > 0) {
            for (int i = 0; i < array.size(); i++) {
                Object object = array.get(i);
                if (object != null) {
                    if (object instanceof String) {
                        array.set(i, ((String) object).trim());
                    } else if (object instanceof JSONObject) {
                        jsonTrim((JSONObject) object);
                    } else if (object instanceof JSONArray) {
                        jsonTrimArray((JSONArray) object);
                    }
                }
            }
        }
    }
}

JSON 的支持使用的JAR


    com.alibaba
    fastjson
    1.2.69_sec11

在此就全部搞定了,有需要的复制即可使用,有用就关注一下吧
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/353416.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号