最代码官方
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方法中对每个参数值进行判断和过滤简单方便多了。
猜你喜欢
- 基于浏览器首选语言的springmvc和freemarker国际化配置的实现
- 基于maven与springMVC的拦截器Interceptor,控制器Controller的使用
- spring mvc 学习使用模板 基础教程
- spring mvc实现文件上传功能
- Spring Mvc初学者专用,里面有4套案例!
- Spring MVC多视图配置简单demo实例,支持freemarker、velocity、jsp视图
- spring mvc注解代码实例教程
- spring mvc如何将form表单中的对象类型绑定
- SpringMVC的三种统一异常处理实例代码分享
- spring3.0 mvc和rest风格的小例子配置demo代码教程
- Spring MVC+apache Shiro框架搭建,基于maven构建
- Spring学习笔记之Spring MVC 入门教程
请下载代码后再发表评论

- 证精 基于浏览器首选语言的springmvc和freemarker国际化配置的实现
- 原 基于maven与springMVC的拦截器Interceptor,控制器Controller的使用
- spring mvc 学习使用模板 基础教程
- spring mvc实现文件上传功能
- 原证 Spring Mvc初学者专用,里面有4套案例!
- 原证 Spring MVC多视图配置简单demo实例,支持freemarker、velocity、jsp视图
- spring mvc注解代码实例教程
- 原证精 spring mvc如何将form表单中的对象类型绑定
- 精 SpringMVC的三种统一异常处理实例代码分享
- spring3.0 mvc和rest风格的小例子配置demo代码教程
- 原 Spring MVC+apache Shiro框架搭建,基于maven构建
- 待 Spring学习笔记之Spring MVC 入门教程


只要有你 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日