Spring MVC在参数绑定前通过Filter过滤器改变请求参数的值
第一步,对request请求进行增强:
/*** author: zhangxueliang* date: 2019-08-23*/
public class ParameterServletRequestWrapper extends HttpServletRequestWrapper {private Map<String , String[]> params = new HashMap<String, String[]>();public ParameterServletRequestWrapper(HttpServletRequest request) throws IOException {super(request);this.params.putAll(request.getParameterMap());}/*** 重载一个构造方法* @param request* @param extendParams*/public ParameterServletRequestWrapper(HttpServletRequest request , Map<String , String[]> extendParams) throws IOException {this(request);addAllParameters(extendParams);}@Overridepublic String getParameter(String name) {String[]values = params.get(name);if(values == null || values.length == 0) {return null;}return values[0];}@Overridepublic String[] getParameterValues(String name) {return params.get(name);}public void addAllParameters(Map<String , String[]>otherParams) {for(Map.Entry<String , String[]>entry : otherParams.entrySet()) {addParameter(entry.getKey() , entry.getValue());}}public void addParameter(String name , Object value) {if(value != null) {if(value instanceof String[]) {params.put(name , (String[])value);}else if(value instanceof String) {params.put(name , new String[] {(String)value});}else {params.put(name , new String[] {String.valueOf(value)});}}}
}
第二步,编写Filter过滤器,不可使用拦截器.因为过滤器可以继续向后传递修改后的request,拦截器不能实现。
/*** author: zhangxueliang* date: 2019-08-23*/
@WebFilter(urlPatterns = "/v11/account/*")//如果这里写@Compnent就是拦截所有请求
public class HttpServletFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) {}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {Map<String, String[]> m = new HashMap<String, String[]>(request.getParameterMap());if ("".equals(request.getParameter("cooperationCompanyId"))){m.put("cooperationCompanyId", new String[]{"-1"});}ParameterServletRequestWrapper parameterRequestWrapper = new ParameterServletRequestWrapper((HttpServletRequest) request, m);//继续向后传递修改后的request,拦截器不能实现。chain.doFilter(parameterRequestWrapper, response);}@Overridepublic void destroy() {}
}
效果:
Spring MVC在参数绑定前通过Filter过滤器改变请求参数的值相关推荐
- SpringMVC表单请求参数的绑定,配置编码过滤器解决请求参数中文乱码问题,自定义类型转换器
文章目录 SpringMVC的参数绑定支持的数据类型 基本数据类型和字符串类型 JavaBean 包装类 Map类型 List类型 POST请求参数中文乱码的解决方法 自定义类型转换器(Date类 ...
- 通过filter过滤器对请求参数进行处理
遇见的问题: 前台把参数通过报文或者使用表单.ajax提交到后台,如果我们的请求参数是加密的,那么我们在controller里面的每一个方法里都需要进行解密处理.如果方法太多,那就太麻烦了. 设计方案 ...
- 关于spring mvc时间类型绑定失败解决方法
关于spring mvc时间类型绑定失败解决方法 前端页面用的easyui,有个日期字段: <input name="sdt" class="easyui-date ...
- vue+filter过滤器(多参数)传参 - 代码篇
vue+filter过滤器(多参数)传参 - 代码篇 传1个参数 //html {{a1 | filterAa}} //js filters:{filterAa(a1){// a1是传入的参数} } ...
- 拦截器获取请求参数post_SpringBoot拦截器如何获取http请求参数
1.1.获取http请求参数是一种刚需 我想有的小伙伴肯定有过获取http请求的需要,比如想 前置获取参数,统计请求数据 做服务的接口签名校验 敏感接口监控日志 敏感接口防重复提交 等等各式各样的场景 ...
- Spring MVC 数据绑定 绑定POJO类型 filter过滤器
概述 用户在传参的过程中肯定不单单是一个且同种类型的,可能同时会传入多个不同类型的参数数据,所以如果使用简单数据绑定,那是非常繁琐的. 所以针对多类型,多参数的请求.可以使用POJO类型进行数据绑定, ...
- Spring MVC 第四章:Form表单验证-JSR303和Spring框架验证以及国际化语言、Filter过滤器
Form表单的验证验证,就是在提交表单的时候进行验证是否为空,是否满足特定条件才可以创建.常见的表单有前端验证和后端验证. 其中,前端验证有:HTML验证,JS验证,Jquery验证. 后端验证有:J ...
- spring mvc DispatcherServlet详解前传---HttpServletBean类
从上章里我们已经看到: DispatcherServlet extends FrameworkServlet FrameworkServlet extends HttpServletBean impl ...
- 使用过滤器(Filter)解决请求参数中文乱码问题(复杂方式)
前述: 在写这篇笔记之前,对笔记中的设计模式进行介绍: 本篇笔记中将要使用到的设计模式是:装饰(包装)设计模式 (1)装饰(包装)设计模式口诀: ①定义一个类,实现被装饰对象的接口 ②定义一个成员变量 ...
最新文章
- c语言打开当前目录下的文件_Linux下自定义文件默认打开方式
- Java的知识点6—— 强制类型转换、基本类型转化时常见错误和问题、 简单的键盘输入和输出
- C# 版本设计模式(Design Pattern)---------------总序
- ctype函数_PHP Ctype(字符类型)函数
- linux 内核系统优化,Linux高并发应用类型对系统内核的优化
- Atlassian 域名被曝一次点击账户接管漏洞 可导致供应链攻击
- mybatis中$和#号的区别
- zynq开发系列6:创建AXI IP实现PS对PL的数据配置(步骤二配置block design)
- ionic platform add ios, Error:spawn EACCES
- Docker容器实现SSH连接
- C盘爆满原来是腾讯电脑管家惹的祸
- 米家app扫描不到石头机器人_石头扫地机器人T7评测:能驾驭豪宅的高端旗舰?...
- 如何用ABBYY FineReader提取图片中的文字
- Apche OFBiz 反序列化漏洞复现
- 论文笔记:FLEX: Unifying Evaluation for Few-Shot NLP
- 安装python环境以及安装pycharm编译器教程
- 使用fsck修复系统文件错误
- c语言编程刘备称帝,汉献帝得知刘备称帝后,为什么先是沉默不语,然后又仰天大笑?...
- unity人物刚体移动_教程篇 | Unity人物移动动画
- 【来日复制粘贴】数据透视表分类不同账龄