如何使用wrapper在filter修改request参数
2010-11-03 17:28
411 查看
from : http://magicgod.javaeye.com/blog/146537
关键字: java, wrapper, request, filter
在filter里如何修改提交的参数呢?
整个request接口是没有提供这样的API的,即使取出ParameterMap,也是只读的。
必须创建一个wrapper:class ParameterRequestWrapper,继承:HttpServletRequestWrapper,里面至少要实现这些方法:
private Map params;
public ParameterRequestWrapper(HttpServletRequest request,Map newParams) {
super(request);
this.params=newParams;
}
public Map getParameterMap() {
return params;
}
public Enumeration getParameterNames() {
Vector l=new Vector(params.keySet());
return l.elements();
}
public String[] getParameterValues(String name) {
Object v = params.get(name);
if(v==null){
return null;
}else if(v instanceof String[]){
return (String[]) v;
}else if(v instanceof String){
return new String[]{(String) v};
}else{
return new String[]{v.toString()};
}
}
public String getParameter(String name) {
Object v = params.get(name);
if(v==null){
return null;
}else if(v instanceof String[]){
String []strArr=(String[]) v;
if(strArr.length>0){
return strArr[0];
}else{
return null;
}
}else if(v instanceof String){
return (String) v;
}else{
return v.toString();
}
}
map, names, values, 一个都不能少啊。
在filter里,这样写:
HttpServletRequest request=(HttpServletRequest) req;
HashMap m=new HashMap(request.getParameterMap());
String fullURL = request.getRequestURI()+"?"+request.getQueryString();
if(matchURL(fullURL) && processParamsters(m)){
ParameterRequestWrapper wrapRequest=new ParameterRequestWrapper(request,m);
chain.doFilter(wrapRequest, resp);
}else{
chain.doFilter(req, resp);
}
matchURL是匹配url来决定是否生效,processParamsters是自定义函数,想怎么处理就怎么处理。
这样的话,经过filter之后,实际上request变成了ParameterRequestWrapper,以后的filter将会操作这个类。不过似乎用在ActionForward上有点问题,还没解决。
这也是j2ee推荐的办法,除了改参数外还可以作很多事,完全可以定制request。
关键字: java, wrapper, request, filter
在filter里如何修改提交的参数呢?
整个request接口是没有提供这样的API的,即使取出ParameterMap,也是只读的。
必须创建一个wrapper:class ParameterRequestWrapper,继承:HttpServletRequestWrapper,里面至少要实现这些方法:
private Map params;
public ParameterRequestWrapper(HttpServletRequest request,Map newParams) {
super(request);
this.params=newParams;
}
public Map getParameterMap() {
return params;
}
public Enumeration getParameterNames() {
Vector l=new Vector(params.keySet());
return l.elements();
}
public String[] getParameterValues(String name) {
Object v = params.get(name);
if(v==null){
return null;
}else if(v instanceof String[]){
return (String[]) v;
}else if(v instanceof String){
return new String[]{(String) v};
}else{
return new String[]{v.toString()};
}
}
public String getParameter(String name) {
Object v = params.get(name);
if(v==null){
return null;
}else if(v instanceof String[]){
String []strArr=(String[]) v;
if(strArr.length>0){
return strArr[0];
}else{
return null;
}
}else if(v instanceof String){
return (String) v;
}else{
return v.toString();
}
}
map, names, values, 一个都不能少啊。
在filter里,这样写:
HttpServletRequest request=(HttpServletRequest) req;
HashMap m=new HashMap(request.getParameterMap());
String fullURL = request.getRequestURI()+"?"+request.getQueryString();
if(matchURL(fullURL) && processParamsters(m)){
ParameterRequestWrapper wrapRequest=new ParameterRequestWrapper(request,m);
chain.doFilter(wrapRequest, resp);
}else{
chain.doFilter(req, resp);
}
matchURL是匹配url来决定是否生效,processParamsters是自定义函数,想怎么处理就怎么处理。
这样的话,经过filter之后,实际上request变成了ParameterRequestWrapper,以后的filter将会操作这个类。不过似乎用在ActionForward上有点问题,还没解决。
这也是j2ee推荐的办法,除了改参数外还可以作很多事,完全可以定制request。
相关文章推荐
- 使用HttpServletRequestWrapper在filter修改request参数
- 继承HttpServletRequestWrapper以实现在Filter中修改HttpServletRequest的参数
- 继承HttpServletRequestWrapper以实现在Filter中修改HttpServletRequest的参数
- 在filter中使用包装类包装request、response分别修改请求参数和修改响应结果
- 继承HttpServletRequestWrapper以实现在Filter中修改HttpServletRequest的参数
- 继承HttpServletRequestWrapper以实现在Filter中修改HttpServletRequest的参数
- Filter中使用 HttpServletResponseWrapper修改response内容
- filter对request请求拦截,对请求参数进行修改
- js_html_input中autocomplete="off"在chrom中失效的解决办法 使用JS模拟锚点跳转 js如何获取url参数 C#模拟httpwebrequest请求_向服务器模拟cookie发送 实习期学到的技术(一) LinqPad的变量比较功能 ASP.NET EF 使用LinqPad 快速学习Linq
- filter修改request参数
- 微信小程序中如何使用setData修改数组或对象中的某一参数
- RevitAPI: 如何获取可以被明细表过滤器ScheduleFilter使用的参数Parameter?
- 在filter中修改request参数
- Fiddler:如何读取本地文件修改Request参数
- springMVC如何使用@RequestParam传递数组类型参数
- HttpServletRequestWrapper,HttpServletResponseWrapper在过滤器Filter中的使用
- 如何使用Ajax(XMLHttpRequest)发送带参数的请求,以及如何在Servlet中获取请求中的参数
- SpringBoot拦截Request修改里面参数内容(HttpServletRequestWrapper)
- 一步步学习SPD2010--第九章节--使用可重用工作流和工作流表单(10)--修改初始表单参数
- 使用 js WinHttpRequest 修改伪造 Referer (附实战代码)