修改request请求参数
本质上来讲,request请求当中的参数是无法更改的,也不能添加或者删除;
但在后台程序中,一般对request的参数的操作,都是通过request的getParameter、getParameterNames、getParameterValues等方法执行的;所以我们要是能重写这些方法,就从侧面改变了request的请求参数。恰好,servlet就提供了一个HttpServletRequestWrapper类来供大家去继承(该类是HttpServletRequest的封装类,public class HttpServletRequestWrapper extends ServletRequestWrapper implements
HttpServletRequest{}),重写request相关方法。
修改request参数的整体流程就是:会定义一个过滤器,在请求刚进入项目的时候,对request处理之后再将其放回。
案例如下:
//@WebFilter(filterName = "paramFilter", urlPatterns = "/*")//过滤器拦截所有请求
//@Order(100)//括号中的数字越大,在多个过滤器的执行顺序越靠前
public class ParamFilter extends OncePerRequestFilter{ @Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { HttpServletRequest wrapper = new RequestWrapper(request);//定义一个新的request(名称是wrapper),
filterChain.doFilter(wrapper, response);//将修改过的request(wrapper)放回
} private static class RequestWrapper extends HttpServletRequestWrapper {//这里用的是内部类,也可以不用 private Map<String, String[]> params = new HashMap<String, String[]>();//将request对象中的参数修改后,放在这个集合里,随后项目取的所有Parameter都是从这个集合中取数 public RequestWrapper(HttpServletRequest request) {//定义构造函数
super(request);//将request交给父类 //先通过request原生的方法,遍历获取到的参数
Enumeration enu=request.getParameterNames();
while (enu.hasMoreElements()) {
String paraName=(String)enu.nextElement(); Map<String, Object> paraObj = (Map<String, Object>)JSONUtils.parse(paraName);//因为我前台传过来的是json格式的参数
Set<Entry<String, Object>> entrySet = paraObj.entrySet();
for (Entry<String, Object> entry : entrySet) {
String key = entry.getKey();
Object value = entry.getValue();
params.put(key, value);//
}
}
//在这里修改params中的数据,不管是添加、修改
...... //将修改好的params重新放入RequestWrapper对象中
addParameters(request,params);
}
public void addAllParameters(Map<String , Object>otherParams) {//增加多个参数
for(Map.Entry<String , Object>entry : otherParams.entrySet()) {
addParameter(entry.getKey() , entry.getValue());
}
}
@Override
public String getParameter(String name) {
String[]values = params.get(name);
if(values == null || values.length == 0) {
return null;
}
return StringEscapeUtils.escapeHtml4(values[0]);
}
@Override
public Enumeration<String> getParameterNames() {
Vector<String> v = new Vector<String>();
Set<Entry<String, String[]>> entrySet = params.entrySet();
for (Entry<String, String[]> entry : entrySet) {
v.add(entry.getKey());
}
Enumeration<String> en = v.elements(); return v.elements();
} @Override
public String[] getParameterValues(String name) {
return params.get(name);
}
}
}
修改request请求参数的更多相关文章
- Fiddler 4 断点调试(修改request请求参数)
1.选中要测试的链接 2然后点击规则的Automatic Breakpoints 的Before Requests 3.重新发送请求找到测试的点链接 最终效果如下
- charles功能(一)修改request请求参数
1.接口处 鼠标右击,选择breakpoints(允许本接口使用breakpionts功能) 2.开始设置断点值 3.然后修改这一条 4.然后执行 5.最终结果
- request请求参数与http请求过程
request请求参数
- jmeter beanShell修改http请求参数
jmeter beanShell修改http请求参数 在使用jmeter进行测试时,需要对上一步响应的明文参数,如userName='tom' token='%sdf%sdkdfj'之类的参数,加密一 ...
- FiddlerScript修改特定请求参数下的返回值
使用场景: api/Live/GetLiveList接口: (1)Type为1,接口返回直播列表 (2)Type为2,接口返回回放列表 现在想修改直播列表的返回值 思路: 利用FiddlerScrip ...
- asp.net中Request请求参数的自动封装
这两天在测一个小Demo的时候发现一个很蛋疼的问题----请求参数的获取和封装,例: 方便测试用所以这里是一个很简单的表单. <!DOCTYPE html> <html xmlns= ...
- 2017.9.26 request请求参数用法
4.2 访问请求参数 request对象的getParamter()方法,可以用来获取用户(客户端)提交的数据 4.2.1 访问请求参数的方法 String 自符串变量 =request.getPar ...
- charles功能(二)修改response请求参数
1.接口处 鼠标右击,选择breakpoints(允许本接口使用breakpionts功能) 2.开始设置断点值 4.重新请求接口(charles的界面变为可编辑状态),修改请求参数,执行请求 5.最 ...
- fiddler 修改request请求
例:在request url后追加&test=1参数 在OnBeforeRequest函数中添加以下代码 if(oSession.uriContains("www.bing.com/ ...
随机推荐
- Design-341. Flatten Nested List Iterator
Given a nested list of integers, implement an iterator to flatten it. Each element is either an inte ...
- poj3026
Borg Maze Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12952 Accepted: 4227 Descri ...
- WebBench源码分析
源码分析共享地址:https://github.com/fivezh/WebBench 下载源码后编译源程序后即可执行: sudo make clean sudo make & make in ...
- (转)WebSphere 中池资源调优 - 线程池、连接池和 ORB
WebSphere 中池资源调优 - 线程池.连接池和 ORB 来自:https://www.ibm.com/developerworks/cn/websphere/library/techartic ...
- JavaScript中的垃圾回收机制与内存泄露
什么是内存泄露? 任何编程语言,在运行时都需要使用到内存,比如在一个函数中, var arr = [1, 2, 3, 4, 5]; 这么一个数组,就需要内存. 但是,在使用了这些内存之后, 如果后面他 ...
- mac 系统安装VM虚拟机打开时报错,提示不是虚拟磁盘的解决方式。
最近刚买的苹果系统,不太会用,装了个虚拟机vmware fusion,好不容易把需要的软件装好,然后不知道是我操作了哪里,今天再次打开虚拟机的时候打不开了,报错提示找不到磁盘文件(虚拟磁盘-00000 ...
- SPSS学习系列之SPSS Modeler (简称SPSS)是什么?
不多说,直接上干货! 推荐博客 SPSS学习系列之SPSS Statistics(简称SPSS)是什么? 官方简介: SPSS Modeler 是全球领先的数据挖掘.预测分析平台软件,拥有简单的图形界 ...
- Windows 添加用户
不多说,直接干货! 欢迎大家,加入我的微信公众号:大数据躺过的坑 人工智能躺过的坑 同时,大家可以关注我的个人博客: http://www.cnblogs.com/zl ...
- slq 修改表结构
1.增加列: alter table tableName add columnName varchar(30) 2.修改列类型: alter table tableName alter column ...
- 原生js动态添加style,添加样式
原生js动态添加style,添加样式 第一种 var style="[assign-url='"+str+"']{display:initial}"; var ...