在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` 子类来动态改变请求参数。这通常用于处理如数据验证、安全过滤、参数转换...
在Java Web开发中,过滤器(Filter)是一个非常重要的组件,它允许我们在请求到达目标Servlet之前对其进行处理,或者在响应返回给客户端之后进行操作。在本篇内容中,我们将深入探讨如何实现一个过滤器来包装request...
然而,如果在处理JSON类型的POST请求时,直接在Filter中打印请求参数,可能会遇到一些问题,如上述描述中的`IOException: Stream closed`异常。这是因为当我们读取请求体时,如果没有正确地管理流,流可能在我们尝试...
server-3.3.1-release\cas-server-3.3.1\modules ,将cas-server-webapp-3.3.1.war 重命名为cas.war,并将war包拷贝到tomcat5.5以上版本的webapps目录下(在此对server jdbc支持不做详细解读,测试使用CAS simaple...
本文将深入探讨如何使用`Filter`(过滤器)来去除参数前后所有的空格,以确保数据的准确性和一致性。这在处理用户输入或者进行数据验证时尤其重要,因为额外的空格可能会导致业务逻辑错误或者数据存储问题。 首先,让...
开发者通常会创建一个包裹类(Wrapper)来覆盖默认的行为,确保请求参数在解码时使用正确的字符编码。例如,`GetRequest.java`可能重写了`getParameter()`和`getParameterValues()`方法,使用UTF-8编码来解析请求...
此外,我们还可以配置其他的认证参数,例如 cas.authentication-url-patterns、cas.validation-url-patterns、cas.request-wrapper-url-patterns 等。 在手动配置 CAS Client 时,我们需要在 web.xml 文件中添加...
本文将详细介绍如何使用Gzip来打包JS和CSS文件,并在Java后台通过Filter实现解压缩。 首先,我们需要了解Gzip的工作原理。Gzip基于DEFLATE算法,该算法结合了LZ77(一种无损数据压缩算法)和霍夫曼编码。它通过查找...
装饰器接收一个函数`fun`作为参数,并在其内部定义了一个新的函数`wrapper`。`wrapper`函数执行原始函数(在这里是`func1`),并在其前后添加额外的行为,即打印"over!"。 ```python def outer(fun): # 返回一个新...
过滤器(Filter)和包装器(Wrapper)是解决此类问题的有效工具。本文将深入探讨如何使用JAVA Web的过滤器和包装器来消除乱码问题。 首先,我们来看过滤器(Filter)。在JAVA Web中,过滤器是Servlet规范的一部分,...
多个参数查询:MyBatis使用参数为Map 在处理多个参数查询时,可以将这些参数封装成一个`Map`对象,然后在SQL语句中通过`#{key}`的方式引用这些参数。 **示例**: ```java Map, Object> params = new HashMap(); ...
1. **编码参数值**:在Android应用中,使用`URLEncoder.encode(value, "UTF-8")`对包含中文的参数值进行编码,这里的"UTF-8"是目标编码格式。例如,如果你有一个名为`value`的字符串,应该在发送前使用此函数进行...
在Java Web开发领域,Apache Tomcat是一个广泛使用的开源应用服务器,尤其在处理Servlet和JSP方面。Tomcat 7.0.70是7.x系列的一个版本,它包含了对Java Servlet 3.0规范的支持,以及其他一些性能改进和bug修复。源码...
该方法通过配置web.xml文件中的过滤器,使用RedisTemplate来保存session数据,并在过滤器中实现对session的读取和写入操作。 配置Web.xml文件 在Web.xml文件中,需要添加一个过滤器,以便对session进行处理。该...
The doFilter method of the Filter is called by the container each time a request/response pair is passed through the chain due to a client request for a resource at the end of the chain. doGet...
《深入解析Tomcat6:源码剖析与服务...这将有助于在实际项目中更高效地使用和定制Tomcat,进一步提升开发效率和系统性能。同时,这种深入的学习也能为开发者向Tomcat7、Tomcat8甚至更高级别的版本迁移打下坚实基础。
3.3.3.5 获取参数 16 3.3.3.6 创建HttpResponse对象 16 3.3.3.7 静态资源处理器和servlet处理器 17 第4章 tomcat的默认连接器 18 4.1 简介 18 4.2 HTTP1.1的新特性 18 4.2.1 持久化连接 18 4.2.2 编码 18 4.2.3 状态...
- `ServletConfig`接口:每个Servlet实例在初始化时都会获得一个`ServletConfig`对象,它包含了Servlet的初始化参数。 - `ServletContext`接口:代表整个Web应用程序的共享环境,可以存储全局信息,监听器可以监听...
3. **请求分发**:请求通过`org.apache.catalina.connector.Request`类进行进一步处理,找到对应的Context、Wrapper(Servlet)。 4. **Servlet调用**:调用Servlet的`service`方法,执行业务逻辑。 5. **响应生成**...
在React开发中,确保代码的质量和可维护性是至关重要的,而进行测试是达到这一目标的关键步骤。本文将深入探讨如何使用React测试框架,特别是酶(Enzyme)和Moxios,来测试React组件以及与Redux的集成。 **React测试...