最代码官方
2015-04-07 12:03:35
原证精
spring mvc自定义过滤器filter实现对请求参数编解码的代码分享
百度,google了半天即使再万能的stackoverflow上也没有得到解答,今天偶然间发现springmvc注解@RequestParam不是通过HttpServletRequest.java的getParameter(String name)方法得到的参数值,而是通过getParameterValues得到的,怪不得debug了半天getParameter方法就是未被调用,filter也没生效。
相关代码如下:
RequestFilter.java
package com.zuidaima.filter; import java.io.IOException; import java.io.UnsupportedEncodingException; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import javax.servlet.http.HttpServletResponse; import org.springframework.web.filter.OncePerRequestFilter; /** *@author www.zuidaima.com **/ public class RequestFilter extends OncePerRequestFilter { public String filter(HttpServletRequest request, String input) { String ret = input; //ios客户端请求参数值可能为(null)服务端过滤掉当null处理即可 if (input == null || input.trim().equals("(null)")) { ret=null; return ret; } final String userAgent = request.getHeader("User-Agent"); final String method = request.getMethod(); //该处可以实现各种业务的自定义的过滤机制 if (method.equalsIgnoreCase("get") || userAgent.toLowerCase().indexOf("android") != -1) { try { ret = new String(input.getBytes("ISO8859-1"), "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } return ret; } @Override protected void doFilterInternal(final HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException { chain.doFilter(new HttpServletRequestWrapper(request) { @Override public String getParameter(String name) { String value = super.getParameter(name); return filter(this, value); } @Override public String[] getParameterValues(String name) { String[] values = super.getParameterValues(name); if (values == null) { return null; } for (int i = 0; i < values.length; i++) { values[i] = filter(this, values[i]); } return values; } }, response); } }
当然必须在web.xml中配置启动该过滤器:
<filter> <filter-name>RequestFilter</filter-name> <filter-class>com.zuidaima.filter.RequestFilter</filter-class> </filter> <filter-mapping> <filter-name>RequestFilter</filter-name> <url-pattern>*.htm</url-pattern> </filter-mapping>
这样就可以实现全局的控制springmvc的参数过滤,比如xss,编解码等业务,比在每个springmvc方法中对每个参数值进行判断和过滤简单方便多了。
猜你喜欢
- java防止中文乱码的过滤器
- springmvc @RequestMapping注解的入门配置教程
- 基于浏览器首选语言的springmvc和freemarker国际化配置的实现
- 基于maven与springMVC的拦截器Interceptor,控制器Controller的使用
- spring AOP 过滤器 拦截器 执行顺序示例
- springmvc @RequestMapping注解伪静态技术
- SpringMVC的三种统一异常处理实例代码分享
- SpringMVC整合Redis demo小例子
- bootstrap jquery underscore backbone 新浪微博 springmvc整合demo代码
- SpringMvc从propertites属性文件读取常量
- Spring MVC实现的带参数的form表单多文件上传
- java Web SpringMVC项目实现12306余票查询功能
请下载代码后再发表评论
相关代码
- 证精 基于浏览器首选语言的springmvc和freemarker国际化配置的实现
- 原 基于maven与springMVC的拦截器Interceptor,控制器Controller的使用
- springmvc @RequestMapping注解的入门配置教程
- 精 SpringMVC的三种统一异常处理实例代码分享
- 证精 bootstrap jquery underscore backbone 新浪微博 springmvc整合demo代码
- 精 spring mvc-showcase,便于学习springmvc,maven工程,建议使用谷歌浏览器
- 原证精 springmvc @RequestMapping注解伪静态技术
- 原 springMVC注解与hibernate完美结合完成基本的增删改查demo源码下载
- 原 SpringMVC整合Redis demo小例子
- 原证精 java Web SpringMVC项目实现12306余票查询功能
- 原证 springmvc开发微信公众平台验证token接口教程及其java源代码分享
- 原 SpringMvc整合Mybatis搭建java Web入门项目实例,是基于MAVEN的java web工程
最近下载
最近浏览
只要有你 LV8
2022年5月25日
11703060125 LV8
2021年6月3日
BovenRaye LV10
2020年6月16日
javaxiaobai1 LV3
2020年5月25日
安宇12345 LV15
2020年1月8日
luohaipeng LV23
2019年12月6日
zuicodee
2019年10月28日
暂无贡献等级
hhuangh LV5
2019年9月24日
四五星
2019年7月30日
暂无贡献等级
LHJ123 LV30
2019年4月20日