博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用HttpServletRequestWrapper重写Request请求参数
阅读量:6951 次
发布时间:2019-06-27

本文共 3850 字,大约阅读时间需要 12 分钟。

目的: 改变请求参数的值,满足项目需求(如:过滤请求中 lang != zh 的请求)

方法: 1.使用 HttpServletRequestWrapper重写

1 public class ChangeRequestWrapper extends HttpServletRequestWrapper { 2     private Map
parameterMap; // 所有参数的Map集合 3 4 public ChangeRequestWrapper(HttpServletRequest request) { 5 super(request); 6 parameterMap = request.getParameterMap(); 7 } 8 9 // 重写几个HttpServletRequestWrapper中的方法10 11 /**12 * 获取所有参数名13 *14 * @return 返回所有参数名15 */16 @Override17 public Enumeration
getParameterNames() {18 Vector
vector = new Vector
(parameterMap.keySet());19 return vector.elements();20 }21 22 /**23 * 获取指定参数名的值,如果有重复的参数名,则返回第一个的值 接收一般变量 ,如text类型24 *25 * @param name 指定参数名26 * @return 指定参数名的值27 */28 @Override29 public String getParameter(String name) {30 String[] results = parameterMap.get(name);31 return results[0];32 }33 34 35 /**36 * 获取指定参数名的所有值的数组,如:checkbox的所有数据37 * 接收数组变量 ,如checkobx类型38 */39 @Override40 public String[] getParameterValues(String name) {41 return parameterMap.get(name);42 }43 44 @Override45 public Map
getParameterMap() {46 return parameterMap;47 }48 49 public void setParameterMap(Map
parameterMap) {50 this.parameterMap = parameterMap;51 }52 }

 

2.新增Filter
1 public class LangFilter implements Filter { 2     @Override 3     public void init(FilterConfig filterConfig) throws ServletException { 4  5     } 6  7     @Override 8     public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { 9 10         ChangeRequestWrapper changeRequestWrapper = new ChangeRequestWrapper((HttpServletRequest) servletRequest);11 12         Map
parameterMap = new HashMap<>(changeRequestWrapper.getParameterMap());13 14 String[] strings = parameterMap.get("lang"); //逻辑代码给定默认的参数值,如果参数不为中文,则直接返回异常15 if (strings == null || strings.length == 0) {16 strings = new String[1];17 strings[0] = "zh";18 parameterMap.put("lang", strings);19 changeRequestWrapper.setParameterMap(parameterMap);20 }else{21 String language = strings[0];22 if (!language.equals("zh")) {23 Map
error = new HashMap<>();24 error.put("code","500");25 26 ServletOutputStream outputStream = null;27 try {28 outputStream = servletResponse.getOutputStream();29 outputStream.write(JSONUtils.obj2Byte(error));30 } finally {31 if (outputStream != null) {32 outputStream.flush();33 outputStream.close();34 }35 }36 37 return;38 }39 }40 //使用复写后的wrapper41 filterChain.doFilter(changeRequestWrapper, servletResponse);42 }43 44 @Override45 public void destroy() {46 47 }48 }

     3.web.xml增加一个过滤器处理

1   
2
languageFilter
3
com.intercepor.LangFilter
4
5
encoding
6
UTF-8
7
8
9
forceEncoding
10
true
11
12
13 14
15
languageFilter
16
*.do
17

所有.do的请求,都会验证此参数

 

 

转载于:https://www.cnblogs.com/cach/p/8052108.html

你可能感兴趣的文章
1.6的锁优化(适应性自旋/锁粗化/锁削除/轻量级锁/偏向锁)
查看>>
C/C++源码网站
查看>>
SICP 2.40 2.41 2.42 2.43
查看>>
建立cover组 成员有cover01 cover02 建立team组 成员有team 01 team02 建立user组 成员有user...
查看>>
linux pxe 系统自动化安装
查看>>
iOS游戏开发有奖征文
查看>>
控制台读写
查看>>
LVS+keepalived负载均衡实战
查看>>
使用 IntraWeb (17) - 基本控件之 TIWRadioButton、TIWRadioGroup、TIWCheckBox
查看>>
KVM虚拟化搭建及其KVM中LVM扩容
查看>>
管理磁盘和文件系统
查看>>
CSS解决高度自适应问题
查看>>
鼠标css样式:cursor
查看>>
ubuntu12.04——samba中的windows、linux用户名关系
查看>>
ruby on rails 多图上传
查看>>
MySQL 的 LIKE 查詢區分大小寫
查看>>
Unity HoloLens开发配置
查看>>
vim剪贴板小结
查看>>
Thinkpad ACCESS CONNECTIONS异常解决
查看>>
各行业对邮件服务器需求及解决方案
查看>>