关于在Spring过滤器中修改request的参数值遇到的问题(二)
来源:互联网 发布:萍乡网络电视台 编辑:程序博客网 时间:2024/05/21 22:33
背景
见上一篇Blog关于在Spring过滤器中修改request的参数值遇到的问题(一)问题描述
Spring框架,使用过滤器解密request中的参数(修改Request中的值),并传递到下一个过滤器错误详情
第一次的修改方式是这样的(RSAUtil是封装的一个工具类,filed是前台input标签的name)String encryptVal = request.getParameter(filed);String decryptVal = RSAUtil.decryptStringByJs(encryptVal);request.setAttribute(filed, decryptVal);
这样在下一个过滤器中根本无法用getParameter取到解密的值。debugger后发现request.getParameter(name)方法是从一个Map中获取的
第二次修改
Map<String, String[]> parameterMap = request.getParameterMap();String encryptVal = request.getParameter(filed);String decryptVal = RSAUtil.decryptStringByJs(encryptVal);parameterMap.put(filed, decryptVal);
可是这次运行直接报错:不能更改一个锁定的Map,好吧,百度百度,找到解决方案
解决方案
定义一个request的包装类import org.apache.catalina.util.ParameterMap;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletRequestWrapper;import java.util.Map;public class ParameterRequestWrapper extends HttpServletRequestWrapper { private ParameterMap<String, String[]> params; @SuppressWarnings("all") public ParameterRequestWrapper(HttpServletRequest request) { super(request); params = (ParameterMap) request.getParameterMap(); // TODO Auto-generated constructor stub } @Override public String getParameter(String name) { // TODO Auto-generated method stub String[] values = params.get(name); if (values == null || values.length == 0) { return null; } return values[0]; } @Override public Map<String, String[]> getParameterMap() { // TODO Auto-generated method stub return params; } public void addParameter(String name, Object value) {// 增加参数 if (value != null) { params.setLocked(false); 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) }); } params.setLocked(true); } }}
使用该包装类
ParameterRequestWrapper newRequest = new ParameterRequestWrapper(request);String encryptVal = request.getParameter(filed);String decryptVal = RSAUtil.decryptStringByJs(encryptVal);newRequest.addParameter(filed, decryptVal);
这下是搞定了,在之后的任何地方都可以用request.getParameter()来取得解密后的参数了
总结:有时候百度还是可以解决问题的,但接下来遇到的问题很尴尬百度没有,见“关于在Spring过滤器中修改request的参数值遇到的问题(三)”
阅读全文
0 0
- 关于在Spring过滤器中修改request的参数值遇到的问题(二)
- 关于在Spring过滤器中修改request的参数值遇到的问题(一)
- 关于在Spring过滤器中修改request的参数值遇到的问题(三)
- spring +ajax 交互传值遇到的问题
- GridView传值遇到的问题-在大Gridview中包含另一个小GridView
- ios kvo 监听值遇到的问题
- 页面属性传值遇到的问题
- $stateParams传值遇到的问题
- 关于windows下redis频繁get 和set相同值遇到的问题
- android获取文件的md5值遇到的问题
- iOS plist文件中取值遇到的陷阱
- 关于springboot过滤器处理request参数问题
- 关于今天在用spring字符集过滤器遇到的问题
- ASP.NET MVC在Request中关于URL的参数
- ASP.NET MVC在Request中关于URL的参数
- POST传值遇到的坑
- 计算斐波那契数列第N项的值遇到的问题
- 浏览器子窗口往父窗口传值遇到的window.opener is null 的问题
- 在 UITableView的底部插入新的cell
- IntentService源码解析
- [IOS APP]江南三部曲-格非有声文学
- 关于阿里云ECS与数据库SQL SERVER RDS
- 申请百度地图密钥Android SDK
- 关于在Spring过滤器中修改request的参数值遇到的问题(二)
- 【linux 命令】正则表达式
- unbuntu-浏览器安装flash-player
- js:输入会员卡号,根据每一位卡号相加之和是否大于20判断是否返利
- except KeyboardInterrupt, e
- Ubuntu 16.04 设置菜单栏位置
- Base思想和cap思想
- 51nod1446 限制价值树
- RSA算法之实现篇(Markdown重新整理版)