前言
有些时候, 我们需要在请求到达Controller之前, 对请求的参数, 即request中的parameter进行修改, 我们发现ServletRequest提供了setAttribute()方法, 然而, 在controller中, 获取request中参数的方法是public String getParameter(String name) 或者 public String[] getParameterValues(String name) 方法.
所以, 这里采用继承javax.servlet.http.HttpServletRequestWrapper装饰者类, 来实现修改request中参数的功能, HttpServletRequestWrapper类是HttpServletRequest接口的实现类, HttpServletRequest接口又是ServletRequest接口的子接口.
其中, HttpServletRequestWrapper对request做一次包装.
步骤
1.实现HttpServletRequestWrapper的子类
|
|
2.实现一个过滤器
定义一个请求参数改变的过滤器, 使请求先通过过滤器来修改其中的parameter, 其中, 过滤器filterName通过@WebFilter注解进行定义.
在代码中, 我们使用我们定义的HttpServletRequestWrapper子类MyRequestWrapper来新建一个request, 并对request增加一个参数addParam, 它的值设置为mason字符串. 之后, 再使用chain.doFilter(request, response)让调用链继续执行.
完成以上步骤, 我们便实现了对ServletRequest中请求参数的修改.之后在我们的Controller中, 便可以获取到addParam参数, 其值为mason.
*额外说明
由于Filter不是Spring容器中的Bean, 在java开发中, 如果我们希望通过Spring在上述实现的RequestParameterFilter中注入bean, 可以采用如下配置:
1.在web.xml文件中, 将filter交由spring管理
|
|
2.进行Spring配置文件配置.
进行上述配置之后, 在Spring的xml配置文件中, 将我们实现的RequestParameterFilter类配置为bean即可.