页面上有个文本输入框,比如username
我想写一个filter,然后在filter中把username的值改变了。
比如用户输入的username是Jack,我想在filter中把Jack改成Tom
有谁知道怎么改?request.setAttribute(),不行,改的不是paramter
request.getParameterMap().put(),也不行,这个map被lock了有办法改吗?
我想写一个filter,然后在filter中把username的值改变了。
比如用户输入的username是Jack,我想在filter中把Jack改成Tom
有谁知道怎么改?request.setAttribute(),不行,改的不是paramter
request.getParameterMap().put(),也不行,这个map被lock了有办法改吗?
解决方案 »
- 进销存数据库之设计
- 表单提交中文无效+乱码,怎么解决?
- table换行问题(在线等)
- 菜鸟提问:关于TOMCAT连接MYSQL的问题!!!
- 我在MyEclipse7.0中打开jsp文件是报错。用过的进来帮忙看看。!
- eclipse3.1 保存的时候,不能编译了,怎么回事?
- 在servlet中出现这样的错误???
- 自定义包问题:我自己定义的包中类为什么,不能被其他包中类调用?
- C:\jdk1.4\jre\lib\ext JDK1.4下的ext 文件夹是做什么的?同时求jdk1.4的下载地址??
- 有一问:如何在JSP中输入中文
- 救教达人!NOD32 4.0安装后tomcat无法启动服务~~~
- 求教高手,不用eclipe怎么用tomcate发布一个项目
第一是你要以什么样的策略改变请求参数,比如要改变哪些参数的值,改变成一个死值还是生成的,还是传进来的值
第二是怎么实现这样的改变如果你的改变很简单,就不必拘泥于一定要改request了吧,用的时候判断一下不就行了吗?
如果一定要改,可以用HttpServletRequestWrapper,在过滤器里把容器生成的request包装一下。在包装类的getParameter方法中实现你的改变策略。
修改完毕后 再重新转向AA.do操作。
不过要注意 在重新转向的时候要加个参数识别,否则就会一直在过滤器中循环操作了。
写一个你自己的httpServletRequest,继承自HttpServletRequestWrapper,假如这个类叫MyHttpServletRequest,
MyHttpServletRequest,重写getParameter方法,HttpServletRequestWrapper实例化的时候必须传递一个
HttpServletRequest对象,把你原来的request对象传进去,往下传递的是你的包装过后的request,
chain.doFilter(myHttpServletRequest, response);private HttpServletRequest request;// 原生的request对象
// 伪代码
public String getParameter(String name){
String value = request.getParameter(name);
// 返回过滤后的数据
return value.replace("jacky","tom");
}
你的办法不可行,谢谢你!To gordonkkk:
继承HttpServletRequestWrapper?继承之后如何改变一个parameter的值?如果你的方法可行,能给个例子吗?
<html:form action="user.do">
<input type="text" name="uname" >-----------------输入zhangsan
<html:submit value="submit"></html:submit>
</html:form>过滤器
request.setAttribute("uname", "lisi");
filterChain.doFilter(request, response);actionSystem.out.println(request.getAttribute("uname"));----------------输出 lisi
我假设你只改username,只把Jack改成Tom,例子如下
这是包装器类public class MyRequestWarpper extends HttpServletRequestWrapper { private HttpServletRequest request;
public MyRequestWarpper(HttpServletRequest request) {
super(request);
this.request = request;
}
@Override
public String getParameter(String parameter) {
if ("username".equals(parameter) && request.getParameter(parameter).equals("Jack")) {
return "Tom";
}
return request.getParameter(parameter);
}
}过滤器中,调用这个包装器request = new MyRequestWarpper(request);
filterChain.doFilter(request, response);