关闭

HttpServletRequestWrapper Filter中装饰Request 解决全站编码问题!

标签: javafilter
262人阅读 评论(0) 收藏 举报

利用Filter解决全站编码问题!!!

解决问题的核心是对request的装饰!!

package com.xuxiang.decorate;

import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

/**
 * 
 * HttpServletRequest 的装饰类
 * 
 * 装饰者:EncodingRequest
 * 被装饰者 :Request
 * 他们共有的超类是HttpServletRequest
 * @author Administrator
 *
 */
public class EncodingRequest extends HttpServletRequestWrapper  {
	
	//首先创建一个超类的变量
	private HttpServletRequest httpServletRequest;
	
	//创建构造器,获取超类
	public EncodingRequest(HttpServletRequest httpServletRequest){
		super(httpServletRequest);
		this.httpServletRequest=httpServletRequest;
	}
	
	//重写request中的某个方法,扩展其功能!!
	@Override
	public String getParameter(String name) {
		String value=httpServletRequest.getParameter(name);
		try {
			value = new String (value.getBytes("ISO-8859-1"),"utf-8");
			
		} catch (UnsupportedEncodingException e) {
			
			throw new RuntimeException(e);
		}
		return value;
	}
	
	
}

package com.xuxiang.filter;

import java.io.IOException;

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.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;

import com.xuxiang.decorate.EncodingRequest;

/**
 * 拦截器设置
 * @author Administrator
 *
 */
public class EncodingFilter implements Filter {

	public void destroy() {

	}

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {

		HttpServletRequest req = (HttpServletRequest) request;

		if (req.getMethod().equals("GET")) {
			// 实例装饰者类EncodingRequest;
			EncodingRequest eRequest = new EncodingRequest(req);
			//将装饰者实例对象eRequest 过滤给资源文件!!
			chain.doFilter(eRequest, response);

		} else if (req.getMethod().equals("POST")) {

			request.setCharacterEncoding("utf-8");
			chain.doFilter(request, response);
		}

	}

	public void init(FilterConfig fConfig) throws ServletException {

	}

}

这样就能解决全站编码的问题!!

1
0
查看评论

HttpServletRequestWrapper采用装饰模式重新封装request,并打印request请求相关参数。

说明: 本篇文章采用过滤器的方式,通过HttpServletRequestWrapper重新封装request,以用来实现打印请求相关日志的操作。其中,该日志过滤器主要针对 POST中传值在BODY中的方式,来实现相关日志打印的操作。 具体的说明以及代码如下: 1。 RequestLoggi...
  • linwei_1029
  • linwei_1029
  • 2014-12-12 16:35
  • 6093

过滤器——解决全站编码

乱码问题: >获取请求参数中的乱码问题;    >>  POST请求:request.setCharacterEncoding(“utf-8”);    >>GET请求:newString(request.getP...
  • fandoudou123
  • fandoudou123
  • 2016-03-08 16:57
  • 380

利用HttpServletRequestWrapper和filter改变request的getParameter方法

1.在web.xml中添加    sysfunctionFilter /functionCode/* changeParameterFilter com.brainlong.ccb...
  • ylundertaker
  • ylundertaker
  • 2015-01-20 14:56
  • 3173

继承HttpServletRequestWrapper以实现在Filter中修改HttpServletRequest的参数

一 简介 如题所示,有时候我们需要在一个请求到达Controller之前能够截获其请求,并且根据其具体情况对 HttpServletRequest 中的参数进行过滤或者修改。这时,有的同学可能会想:我们是否可以在一个Filter中将 HttpServletRequest 里的所有参数都取...
  • zhaohongjuan
  • zhaohongjuan
  • 2017-02-17 14:11
  • 2639

HttpServletRequestWrapper重新并修改http请求信息

Servlet规范中所引入的filter令人心动不已,因为它引入了一个功能强大的拦截模式。Filter是这样一种Java对象,它能在request到达servlet的服务方法之前拦截HttpServletRequest对象,而在服务方法转移控制后又能拦截HttpServletResponse对象。你...
  • zzuchenyb
  • zzuchenyb
  • 2015-09-28 15:22
  • 1903

Filter过滤器及HttpServletRequestWrapper使用

Filter过滤器是一种比较实用的东西,可以过滤不良信息,对提交来的信息进行处理。是Request和Response之间的传输纽带。 具有重要作用,下面用一个Filter过滤器的程序来熟悉过滤器的使用。在提交的数据信息中,有一些信息需要过滤掉。例如, 一些暴力情色信息,我们可以通过过滤器来过滤掉...
  • lovequanquqn
  • lovequanquqn
  • 2016-05-07 18:05
  • 2317

继承HttpServletRequestWrapper 实现request中流的重复获取

业务场景:需要打印所有的api请求的信息到log中,在Filter中拦截了所有的api请求,但是打印的信息中需要包含api请求的body,如果在Filter中使用request.getInputStream()来获取流来得到body中的信息,可以达到预期效果,但是流的获取只能获取一次,之后再获取就获...
  • cstdiohao
  • cstdiohao
  • 2017-09-25 14:56
  • 247

HttpServletRequestWrapper,HttpServletResponseWrapper在过滤器Filter中的使用

Servlet规范中所引入的filter令人心动不已,因为它引入了一个功能强大的拦截模式。Filter是这样一种Java对象,它能在request到达servlet的服务方法之前拦截HttpServletRequest对象,而在服务方法转移控制后又能拦截HttpServletResponse对象。你...
  • QH_JAVA
  • QH_JAVA
  • 2015-08-23 19:38
  • 5488

Filter应用之解决全站字符乱码问题

1 说明 乱码问题: l  获取请求参数中的乱码问题; Ø  POST请求:request.setCharacterEncoding(“utf-8”); Ø  GET请求:newString(request.getParameter(“xxx...
  • xxssyyyyssxx
  • xxssyyyyssxx
  • 2015-11-24 11:07
  • 572

解决在Filter中读取Request中的流后,后续controller或restful接口中无法获取流的问题

首先我们来描述一下在开发中遇到的问题,场景如下: 比如我们要拦截所有请求,获取请求中的某个参数,进行相应的逻辑处理:比如我要获取所有请求中的公共参数 token,clientVersion等等;这个时候我们通常有两种做法  前提条件是我们实现Filter类,重写doFilter方法 ...
  • PYXLY1314
  • PYXLY1314
  • 2016-07-04 09:21
  • 6125
    个人资料
    • 访问:44053次
    • 积分:735
    • 等级:
    • 排名:千里之外
    • 原创:28篇
    • 转载:12篇
    • 译文:0篇
    • 评论:2条
    最新评论