在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。
分享到:
相关推荐
springboot应用使用wrapper打包成安装windows服务,亲测好用,记得给好评,谢谢,压缩包中带文档
Class FCHttpRequest is responsible for implementing send HTTP request and receive response, it's a wrapper class for WinINet. Class FCHttpRequestManager is a management of FCHttpRequest, responsible ...
Java Service Wrapper使用总结,将java应用发布为可安装的服务
Java Service Wrapper使用说明
Mybatis plus无介绍快使用,Wrapper条件构造器的使用附源码(五)
QueryWrapper 常用用法
MyBatisPlus条件构造器 -Wrapper详解(为知笔记版,可用网页打开),详解wrapper条件构造器的各种使用方法及其扩展类的使用方法。
SpringBoot 使用Java Service Wrapper 部署Windows服务
wrapper在struts2中的应用装饰者设计模式在Struts2框架中的应用
SCORM-to-xAPI-Wrapper, SCORM一起使用的APIWrapper.js 文件,内嵌embedded调用 SCORM-to-xAPI-Wrapper这个项目包含修改的SCORM版本 1.2 APIWrapper.js 文件,一个修改的SCORM 2004 APIWrapper.js 文件和一个新的...
react-native-charts-wrapper图表库页面布局使用案例,资源仅包含页面布局样式展示,可结合博客https://blog.csdn.net/zcmain/article/details/107909374观看
去CSDN下载所谓破解出现以下错误:wrapper | Licensed to (null) for (null) wrapper | wrapper | Launching a JVM... jvm 1 | WrapperManager: Initializing... jvm 1 | WrapperJNI Error: Not licensed to use ...
使用Wrapper将Java程序注册为Windows的服务
Kompex SQLite Wrapper Source
10G以太网 wrapper 千兆万兆以太网控制器 wrapper 万兆
windows程序设计(珍藏版)_wrapper_wrapperwindows程序设计(珍藏版)_wrapper_wrapperwindows程序设计(珍藏版)_wrapper_wrapper
tcp_wrapper tcp_wrapper
wrapper.h头文件都在里面了,我的操作系统实验作业源码是需要这里的头文件才可以运行,当然这个头文件只是相当于万能头文件,你也可以按自己的经验添加部分头文件即可运行我的源码。(最后拜托审核员大大不要修改我...
使用Shady DOM polyfill时有关CSS封装的注意事项如果打算使用Shady DOM *.vue ,建议在*.vue文件中使用代替<style scoped> ,因为它不像Shadow DOM那样提供真实的样式封装,因此外部样式表可能会影响您的组件...
RDP Wrapper对应的配置文件,支持10.0.1904.1503