Java 通过 filter 过滤器对请求参数进行处理并修改

news/2024/11/7 18:46:54/

通过 filter 过滤器对请求参数进行处理并修改

  • 问题描述:
  • 解决方案
    • 1、重写 HttpServletRequestWrapper 类
    • 2、新增过滤器

问题描述:

通过过滤器,对前端请求过来的参数进行处理(本次是对请求参数进行前后空格的去除),然后用处理后的参数进行数据查询。

解决方案

1、重写 HttpServletRequestWrapper 类

import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;public class ParameterRequestWrapper extends HttpServletRequestWrapper {// 存放JSON数据主体private String body;public ParameterRequestWrapper(HttpServletRequest request, String context) {super(request);body = context;}@Overridepublic ServletInputStream getInputStream() throws IOException {final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body.getBytes("UTF-8"));ServletInputStream servletInputStream = new ServletInputStream() {@Overridepublic int read() throws IOException {return byteArrayInputStream.read();}@Overridepublic boolean isFinished() {return false;}@Overridepublic boolean isReady() {return false;}@Overridepublic void setReadListener(ReadListener listener) {}};return servletInputStream;}@Overridepublic BufferedReader getReader() throws IOException {return new BufferedReader(new InputStreamReader(this.getInputStream()));}
}

2、新增过滤器

import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.common.filter.ParameterRequestWrapper;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.Set;/*** 传输过滤器,去除传参的前后空格*/
@Component
public class TrimEntityFilter extends OncePerRequestFilter {@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)throws ServletException, IOException {try {// 从请求中获取参数信息JSONObject body = getBody(request);// 去除参数中字段的前后空格String newBody = trimParams(body);if (StrUtil.isNotBlank(newBody)) {//定义一个新的requestParameterRequestWrapper wrapper = new ParameterRequestWrapper(request, newBody);chain.doFilter(wrapper, response);} else {chain.doFilter(request, response);}} catch (Exception e) {chain.doFilter(request, response);}}/*** 从请求中获取参数值* @param request 请求体* @return 获取到的参数值*/private JSONObject getBody(HttpServletRequest request) throws IOException {StringBuilder data = new StringBuilder();String line;BufferedReader reader = request.getReader();while (null != (line = reader.readLine())) {data.append(line);}// 打印获取到的请求参数值return JSONObject.parseObject(data.toString());}/*** 将获取到的参数信息去除前后空格* @param paramJson body 参数值* @return 去前后空格后的参数串*/private String trimParams(JSONObject paramJson) {// 判断值是不是字符串,是的话去除前后空格Set<String> keySet = paramJson.keySet();for (String key : keySet) {Object value = paramJson.get(key);if (value instanceof String) {paramJson.put(key, ((String) value).trim());}}return paramJson.toJSONString();}
}

http://www.ppmy.cn/news/1287240.html

相关文章

CentOS进入单用户模式

一、重启 二、出现内核选项 按“e” 三、编辑这一行 输入 rw init/sysroot/bin/sh 四、进入单用户模式 ctrlx 进入 五、切换目录 chroot /sysroot 六、然后你就操作你的系统了。 修改密码等等

【教学类-43-03】20231229 N宫格数独3.0(n=1、2、3、4、6、8、9) (ChatGPT AI对话大师生成 回溯算法)

作品展示&#xff1a; 背景需求&#xff1a; 大4班20号说&#xff1a;我不会做这种&#xff08;九宫格&#xff09;&#xff0c;我做的是小格子的&#xff0c; 他把手工纸翻过来&#xff0c;在反面自己画了矩阵格子。向我展示&#xff1a;“我会做这种&#xff01;” 原来他会…

文件分片上传(模拟网盘效果)

文件分片上传&#xff08;模拟网盘效果&#xff09; 文章说明简单模拟拖拽文件夹和选择文件的进度条效果效果展示结合后端实现文件上传效果展示加上分片的效果效果展示加上MD5的校验&#xff0c;实现秒传和分片的效果后续开发说明源码下载 文章说明 文章主要为了学习文件上传&a…

QT 利用开源7z 实现解压各种压缩包,包括进度条和文件名的显示(zip,7z,rar,iso等50多种格式)

想做一个winRAR一样的解压软件吗?很简单,利用开源的7z库就能实现。我看网上其他人说的方法不敢苟同,误人子弟。以前自己在项目中使用过7z,这次又有需要,就想记录下来。如果你研究过如何用7z的话,一定知道7z的每一个GUID都代表了一种格式,50多种GUID也就有50多个格式,最…

透彻掌握GIT基础使用

网址 https://learngitbranching.js.org/?localezh_CN 清屏 clear重新开始reset

100天精通风控建模(原理+Python实现)——第13天:风控建模中的方差分析是什么?怎么实现?

风控模型已在各大银行和公司都实际运用于业务,用于营销和风险控制等。本文以视频的形式阐述风控建模中方差分析是什么,怎么实现。并提供风控建模原理和Python实现文章清单。    之前已经阐述了100天精通风控建模(原理+Python实现)——第1天:什么是风控建模?    100天精…

天擎离线升级工具使用说明

免责声明 本文旨在提供信息和解决问题的建议&#xff0c;观点和建议可能不适用于个人情况&#xff0c;仅供参考&#xff01;&#xff01;&#xff01; 文章中所有敏感信息已经修改&#xff0c;对于因本文中提供的信息而导致的任何直接或间接损失或损害不承担责任。 使用本文中的…

【2024考研】心情记录

今天是12.26日。距离24考研已经过去了2天&#xff0c;自认为缓过来了&#xff0c;故写下这篇文章。 25日早上简单过了一下答案&#xff0c;但实在是记不住答案了&#xff0c;不知道是我的脑子抵触还是怎的&#xff0c;像一块灰色的布遮住了我的记忆&#xff0c;羞于打开&#x…