ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【Filter】解决乱码和敏感字符问题

2019-09-20 09:08:10  阅读:215  来源: 互联网

标签:HttpServletRequest Filter String 字符 void request getParameter value 乱码


  1. 登陆页面login.jsp
<body>
	<form action="${pageContext.request.contextPath }/encodeServlet" method="post">
	username:<input type="text" name="username"/>
	<input type="submit" value="POST方式提交"/>
	</form>
	<hr/>
	<form action="${pageContext.request.contextPath }/encodeServlet" method="get">
	username:<input type="text" name="username"/>
	<input type="submit" value="GET方式提交"/>
	</form>
</body>
  1. EncodeServlet中的内容
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String type=request.getParameter("type");
		if("mgString".equals(type))
		{
			String content=request.getParameter("content");
			System.out.println(content);
		}else
		{
		System.out.println(request.getClass());
		String name  = request.getParameter("username");
		System.out.println(name);
		}
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String name  = request.getParameter("username");
		System.out.println(name);
	}
  1. 创建com.Demo.Filter下的EncodingFilter.Java文件,导入javax.servlet接口在这里插入图片描述

  2. 在web.xml中在配置一个过滤器

<filter>
	<filter-name>UserFilter</filter-name>
	<filter-class>com.etc.filter.UserFilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>UserFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>
  1. 往EncodingFilter中继续写内容
    生成代理对象
    Proxy代理——reflect反射包
    HttpServletRequest 是接口
    Proxy.newProxyInstance(目标对象的类加载器,目标对象的接口,对代理对象进行什么操作)
//请求乱码过滤器
public class UserFilter implements Filter {
	List<String>list;

	public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
			throws IOException, ServletException {
		// 转型
		final HttpServletRequest request = (HttpServletRequest) req;
		HttpServletResponse response = (HttpServletResponse) res;

		// 处理POST方式提交的数据的乱码问题
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");

		// 处理GET方式提交的数据乱码问题
		// 要创建一个request对象的代理对象
		HttpServletRequest proxy = (HttpServletRequest) Proxy.newProxyInstance(request.getClass().getClassLoader(),
				new Class[] { HttpServletRequest.class }, new InvocationHandler() { // 处理器

					public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
						Object returnValue = null;
						// 判断当前request对象的方法名称
						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);
	}

	public void init(FilterConfig fConfig) throws ServletException {
			//创建敏感字符库
		list=new ArrayList<String>();
		list.add("诈");
		list.add("骗");
		list.add("恐");
		
	}

	public void destroy() {

	}

}

标签:HttpServletRequest,Filter,String,字符,void,request,getParameter,value,乱码
来源: https://blog.csdn.net/hutuyaoniexi/article/details/101040228

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有