1、继承Filter的过滤类

package fly.cloud.bank.config.filter;import org.springframework.stereotype.Component;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;/*** @ProjectName: fly-cloud-bank* @Package: fly.cloud.bank.config.filter* @ClassName: BankParamFilter* @Author: hfq* @Description: bank服务入参特殊符号去除过滤器* @Date: 2021/4/8 10:00* @Version: 1.0*/
@Component
public class BankParamFilter implements Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("bank服务入参特殊符号去除过滤器");ParameterRequestWrapper parameterRequestWrapper = new ParameterRequestWrapper((HttpServletRequest) servletRequest);filterChain.doFilter(parameterRequestWrapper,servletResponse);}
}
package fly.cloud.bank.config.filter;import com.alibaba.fastjson.JSON;
import com.alipay.api.internal.util.file.IOUtils;
import com.aliyun.openservices.log.http.utils.HttpHeaders;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import fly.cloud.bank.urtils.CharacterUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.http.MediaType;import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.*;/*** @ProjectName: fly-cloud-bank* @Package: fly.cloud.bank.config.filter* @ClassName: ParameterRequestWrapper* @Author: hfq* @Description: 重写HttpServletRequestWrapper类用于修改参数* @Date: 2021/4/8 10:20* @Version: 1.0*/
public class ParameterRequestWrapper extends HttpServletRequestWrapper {public ParameterRequestWrapper(HttpServletRequest request) {super(request);//只处理Post、PUT请求,这儿不用处理}/*** 重写getInputStream方法  post类型的请求参数必须通过流才能获取到值*/@Overridepublic ServletInputStream getInputStream() throws IOException {Map<String,Object> params = new HashMap<>();if(!(super.getHeader(HttpHeaders.CONTENT_TYPE).equalsIgnoreCase(MediaType.APPLICATION_JSON_UTF8_VALUE) || super.getHeader(HttpHeaders.CONTENT_TYPE).equalsIgnoreCase(MediaType.APPLICATION_JSON_VALUE))){return super.getInputStream();}//为空,直接返回String json = IOUtils.toString(super.getInputStream(), "utf-8");if (StringUtils.isEmpty(json)) {return super.getInputStream();}System.out.println("转化前参数:"+json);//reqBodyStr转为Map对象params = new ObjectMapper().readValue(json, new TypeReference<HashMap<String, Object>>() {});//去除特殊字符modifyParameterValues(params);System.out.println("转化后参数:"+JSON.toJSONString(params));ByteArrayInputStream bis = new ByteArrayInputStream(JSON.toJSONString(params).getBytes("utf-8"));return new MyServletInputStream(bis);}/*** 将parameter的值去除特殊字符后重写回去*/public void modifyParameterValues(Map<String,Object> params){Set<String> set = params.keySet();Iterator<String> it=set.iterator();while(it.hasNext()){String key= it.next();//处理参数getValueByKey(params,key);}}private void getValueByKey(Map<String,Object> params,String key) {Object value = judgeObject(params.get(key));params.put(key,value);}private Object recursiveReplaceCharacter(Map<String, Object> vo) {Map<String, Object> replaceMap = new HashMap<>();for(String key : vo.keySet()){//keySet获取map集合key的集合  然后在遍历key即可Object replaceMapValue = vo.get(key);Object a = judgeObject(replaceMapValue);replaceMap.put(key,a);}return replaceMap;}private Object judgeObject(Object replaceMapValue) {if (null == replaceMapValue) {//key对应的值为空return null;}if (replaceMapValue instanceof String) {//key对应的值为String类型, 去空格后重新放入mapreturn CharacterUtils.replaceBankParameter((String) replaceMapValue);} else if (replaceMapValue instanceof Map) {return recursiveReplaceCharacter((Map<String,Object>) replaceMapValue);} else if (replaceMapValue instanceof List) {//key对应的值为List类型List<Object> alist = (List<Object>) replaceMapValue;for (int i = 0; i < alist.size(); i++) {//遍历listObject vol = alist.get(i);if (vol instanceof String) {//list里的元素为String, 去空格alist.set(i,CharacterUtils.replaceBankParameter((String) vol));} else if (vol instanceof Map) {//list里的元素为Map, 递归处理alist.set(i, recursiveReplaceCharacter((Map<String,Object>) vol));}}return alist;}return replaceMapValue;}
}class MyServletInputStream extends  ServletInputStream{private ByteArrayInputStream bis;public MyServletInputStream(ByteArrayInputStream bis){this.bis=bis;}@Overridepublic boolean isFinished() {return true;}@Overridepublic boolean isReady() {return true;}@Overridepublic void setReadListener(ReadListener listener) {}@Overridepublic int read(){return bis.read();}
}
@Slf4j
public class CharacterUtils {/*** 替换银行入参特殊字符*/public static String replaceBankParameter(String str){String regEx = "[‘&;\\[\\]<>|]";str = Pattern.compile(regEx).matcher(str).replaceAll("").trim();return str;}
}

java 过滤器过滤特殊字符相关推荐

  1. java正则表达式 过滤特殊字符的正则表达式

    在网上找了好久也没找到个合适的正则表达式以过滤特殊字符:自己学习了下,写了两个,实现要求. Java代码 // 过滤特殊字符 public static String StringFilter(Str ...

  2. java正则过滤特殊字符

    import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.regex.PatternSyntax ...

  3. java 过滤器 过滤文件中的文件_Java 使用FileFilter过滤器对文件进行搜索

    FileFilter概述 java.io.FileFilter是一个接口,是File的过滤器. 该接口的对象可以传递给File类的listFiles(FileFilter filter)作为参数,Fi ...

  4. java过滤器过滤Emoji 表情

    1.web.xml添加过滤器 <filter><filter-name>EmojiFilter</filter-name><filter-class>c ...

  5. java正则表达式过滤特殊字符_使用Java正则表达式过滤特殊字符

    在某航空集团,系统参数必须过滤一下字符,于是正则表达式处理拦路了! 需求: 系统输入框(所有输入框),所有URL,过滤以下关键字和特殊字符(下述字符,有哪些影响到业务系统使用的,请具体列出,并说明原因 ...

  6. Java过滤特殊字符的正则表达式

    在网上找了好久也没找到个合适的正则表达式以过滤特殊字符:自己学习了下,写了两个,实现要求. Java代码   // 过滤特殊字符 public   static   String StringFilt ...

  7. java 正则表达式过滤_java正则表达式过滤特殊字符

    Java用正则表达式 过滤特殊字符,只允许中文.字母Java用正则表达式 过滤特殊字符,只允许中文.字母或数字,该怎么写? String s1="我是正确测试数据aasdf2342343AS ...

  8. java stream过滤_Java Stream过滤器

    java stream过滤 Java Stream filter can be very helpful when you want to do some processing only on som ...

  9. Java添加过滤器过滤xss入侵

    Filter过滤器过滤XSS攻击 一.springmvc框架 1.添加自定义过滤器文件XssFilter.java和XssHttpServletRequestWrapper.java XssFilte ...

最新文章

  1. Oracle的登陆问题和初级学习增删改查(省略安装和卸载)
  2. JavaScript语言调试技巧
  3. 使用在线编辑器创建 SAP UI5 项目并运行
  4. TP5在前端时间戳转换为时间格式
  5. 【例1】 给定n(n>=1),用递归的方法计算1+2+3+4+...+(n-1)+n。
  6. python 调用父类classmethod_Python__子类调用父类的方法
  7. C++ 求解一整数划分问题
  8. 项目管理之我见:程序开发步骤
  9. H3C交换机配件RS232配置线(DB9针转RJ45)
  10. 零基础如何自学编程?
  11. 通达信软件里php文件在哪,通达信股票交易软件使用秘籍
  12. 深度WindowsXp错误的打了SP3补丁之后,无法进入系统
  13. 10 ,盒图( 统计 ) boxplot :单盒,多盒
  14. Python实现有趣的CRAPS赌博游戏
  15. Centos7安装Docker,阿里源,网易镜像
  16. Rooting A Linux System 101
  17. 表格的边框如何做到和EXCEL的外边框为粗线,内部为细线的效果
  18. CEPH概述及实验(CEPH部署及群集搭建+节点扩容+数据恢复)
  19. java知识点博客园_Java知识点总结1
  20. spark1.0和2.0的区别_Spark2.0 VS Spark 1.* -------SparkSession的区别

热门文章

  1. 【Iterator模式】C++设计模式——迭代器
  2. 开发的vscode插件,如何在用户卸载该插件时,删除该插件对应的文件
  3. 利用oc门或od门实现线与_OD门、OC门和三态门的主要作用和应用
  4. CVBS全电视信号的一些基本知识
  5. Hue集成的一些问题
  6. 游戏学院改变了谁的命运?
  7. 英语笔记.通识读本 数学
  8. void子函数调用问题(已解决)
  9. 前端学习——HTML的各种标签(以及代码样例)
  10. STM32之完成对SD卡的数据读取