javaWed项目中用过滤器实现转码功能,敏感词汇过滤更能,处理Get和Post接收数据中的中文乱码问题以及敏感词汇的处理
2016-10-09 08:49
921 查看
通过过滤器可以解决servlet的get和post方法提交数据中的中文乱码问题
通常我们是这么处理中文乱码问题的:
处理post方式提交的数据乱码:
get方式传递
传输方
接收方
每次都得这样处理,很麻烦,因此我们需要写一个用来转码的过滤器
转码处理原理:在客户端每次发起请求时,都会先调用过滤器,通过过滤器践行分析,分别对Get和Post方式进行转码。
敏感词汇处理原理:将转码后的字符串去与存有敏感词汇的库进行遍历比较,如果包含,就替换成 * 。
代码如下:
servlet代码:
过滤器是需要在web.xml进行部署的。
注意!
filter部署必须在servlet部署的前面!
web.xml代码如下:
欢迎大神来提意见!
通常我们是这么处理中文乱码问题的:
处理post方式提交的数据乱码:
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
get方式传递
传输方
String name = URLEncoder.encode("张三","UTF-8");
接收方
String name = new String(request.getParameter("name").getBytes("ISO8859-1"),"UTF-8");
每次都得这样处理,很麻烦,因此我们需要写一个用来转码的过滤器
转码处理原理:在客户端每次发起请求时,都会先调用过滤器,通过过滤器践行分析,分别对Get和Post方式进行转码。
敏感词汇处理原理:将转码后的字符串去与存有敏感词汇的库进行遍历比较,如果包含,就替换成 * 。
代码如下:
servlet代码:
package com.gpf.util; import java.io.IOException; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.util.ArrayList; import java.util.List; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 过滤器,进行转码(解决中文问题)、过滤敏感字 * @author 朝九晚十 * */ public class EncordeFilter implements Filter { List<String> list ; @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { //System.out.println("过滤器正在过滤"); //转型 final HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; //处理Post方式提交的数据乱码问题 request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); //创建一个request对象的代理对象 HttpServletRequest proxy = (HttpServletRequest) Proxy.newProxyInstance(request.getClass().getClassLoader(),//获取到目标对象类加载器 new Class[]{HttpServletRequest.class},//目标对象的接口 new InvocationHandler() { //处理器 @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object returnValue = null; //获取方法名字 String methodName = method.getName(); if("getParameter".equals(methodName)){ //接收方法参数 String value = request.getParameter(args[0].toString()); //判断是get还是post String methodSubmit = request.getMethod(); if("GET".equals(methodSubmit)){ //进行非空判断 if(!("".equals(value))&&value!=null){ value = new String(value.getBytes("ISO-8859-1"),"UTF-8"); } } //进行敏感字符过滤 for(String str : list){ if(value.contains(str)){ value = value.replace(str, "*"); } } return value; }else{ //调用他的基础方法 returnValue = method.invoke(request,args); } return returnValue; } }); chain.doFilter(proxy, response); } @Override public void init(FilterConfig arg0) throws ServletException { System.out.println("过滤器初始化。。。。"); list = new ArrayList<String>(); list.add("恐"); list.add("怖"); list.add("织"); list.add("组"); list.add("诈"); list.add("骗"); } @Override public void destroy() { //System.out.println("过滤器销毁。。。。"); } }
过滤器是需要在web.xml进行部署的。
注意!
filter部署必须在servlet部署的前面!
web.xml代码如下:
<filter> <filter-name>EncordeFilter</filter-name> <filter-class>com.gpf.util.EncordeFilter</filter-class> </filter> <filter-mapping> <filter-name>EncordeFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
欢迎大神来提意见!
相关文章推荐
- JAVA POST与GET数据传递时中文乱码问题解决方法
- java中form以post、get方式提交数据中文乱码问题总结
- java中form以post、get方式提交数据中文乱码问题总结
- http 的post与get方法 以及处理中文乱码问题
- java中form以post、get方式提交数据中文乱码问题总结(转)
- java中form以post、get方式提交数据中文乱码问题总结
- java中form以post、get方式提交数据中文乱码问题总结
- java处理接收inputstream中传来的中文字,出现某个字乱码问题
- 小议Servlet接收post和get混合提交中文乱码问题
- 小议Servlet接收post和get混合提交中文乱码问题
- Java jsp/servlet GET/POST 字符集编码问题(中文乱码)
- java post、get中文乱码问题
- java web过滤器实际应用(解决中文乱码 html标签转义功能 敏感字符过滤功能)
- 解决servlet中输出中文到浏览器以及post、get两种提交方法乱码问题
- java 解决全站字符乱码(POST和GET中文编码问题)
- java springmvc post和get中文乱码问题
- java 实现Excel数据导入数据库时,中文乱码问题
- 找到一篇关于form以post、get方式提交数据中文乱码问题总结
- JAVA POST与GET方法中文乱码问题解决方法
- ajax实现省级联动以及网站项目中通过写一个过滤器全局配置解觉整个网站的乱码问题