首页 > 其他分享 >初探-HttpServletRequestWrapper包装类

初探-HttpServletRequestWrapper包装类

时间:2023-08-01 14:15:26浏览次数:37  
标签:customParameters HttpServletRequestWrapper String 自定义 包装 初探 import public

HttpServletRequestWrapper 是 Java Servlet API 中的一个类,它是一个装饰器设计模式的实现,用于扩展和包装原始的 HttpServletRequest 对象。通过继承 HttpServletRequestWrapper 类,我们可以在不修改原始请求对象的情况下,对其进行增强或修改。

这个类的作用在于拦截和改变对原始 HttpServletRequest 对象的方法调用,并提供自定义的逻辑来处理请求。通过创建自定义的 HttpServletRequestWrapper 子类,我们可以对请求进行定制,比如修改请求参数、增加请求头、拦截请求内容等。

下面举一个简单的例子来说明如何使用 HttpServletRequestWrapper

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;

public class CustomHttpServletRequestWrapper extends HttpServletRequestWrapper {

    private final Map<String, String[]> customParameters;

    public CustomHttpServletRequestWrapper(HttpServletRequest request) {
        super(request);
        customParameters = new HashMap<>();
        customParameters.putAll(request.getParameterMap());
        // 添加自定义参数
        customParameters.put("customParam", new String[]{"Hello, Custom Parameter!"});
    }

    @Override
    public String getParameter(String name) {
        String[] values = customParameters.get(name);
        if (values != null && values.length > 0) {
            return values[0];
        }
        return super.getParameter(name);
    }

    @Override
    public Map<String, String[]> getParameterMap() {
        return Collections.unmodifiableMap(customParameters);
    }

    @Override
    public Enumeration<String> getParameterNames() {
        return Collections.enumeration(customParameters.keySet());
    }

    @Override
    public String[] getParameterValues(String name) {
        return customParameters.get(name);
    }
}

在上面的例子中,我们创建了一个名为 CustomHttpServletRequestWrapper 的子类,它继承自 HttpServletRequestWrapper。在构造函数中,我们调用父类的构造方法,并在此基础上添加了一个自定义的请求参数 "customParam",用于演示自定义的请求参数添加。

在重写的 getParametergetParameterMapgetParameterNamesgetParameterValues 方法中,我们分别拦截了对原始 HttpServletRequest 对象的方法调用,并提供了自定义的参数值。

在实际使用中,我们可以在过滤器中使用这个自定义的 HttpServletRequestWrapper 来处理请求,或者在自定义的控制器中使用。这样,我们可以对请求进行个性化的处理,实现诸如参数增加、修改等功能。

标签:customParameters,HttpServletRequestWrapper,String,自定义,包装,初探,import,public
From: https://www.cnblogs.com/zhangluabc/p/17596271.html

相关文章

  • 拦截器-初探HandlerInterceptor
    HandlerInterceptor接口是Spring框架中提供的一种拦截器(Interceptor),它用于在处理器方法执行前后,以及请求处理完成后进行拦截和增强处理。拦截器是SpringMVC框架的一个重要组件,它可以用于在请求被处理前后进行预处理和后处理。拦截器可以用来实现诸如权限验证、日志记录、性......
  • WebView初探
    从WebView初探了解到WebView的强大,。听说WebView对Javascript的支持也很强,想从网上找些例子,还很难找,最终从google老家找了一个Java和Javascript互调的例子,当时看了,下巴“咣当”就掉在地上了,太强了!这样也行?整个EclipseADT工程例子中都有,这里重点分析一下代码:Java代码......
  • 第16章 进程管理与SELinux初探
    第16章进程管理与SELinux初探一个程序被加载到内在当中运作,那么在内存中的那个数据就被称为进程(process)。进程是操作系统上非常重要的概念,所有系统上面跑的数据都会以进程的形态存在。16.1什么是进程(process)在Linux系统中:触发任何一个事件时,系统都会将他定义成为一个......
  • 概率图模型(PGM):贝叶斯网(Bayesian network)初探
    概率图模型(PGM):贝叶斯网(Bayesiannetwork)初探1.从贝叶斯方法(思想)说起-我对世界的看法随世界变化而随时变化用一句话概括贝叶斯方法创始人ThomasBayes的观点就是:任何时候,我对世界总有一个主观的先验判断,但是这个判断会随着世界的真实变化而随机修正,我对世......
  • 条件随机场(conditional random field,CRF)模型初探
    条件随机场(conditionalrandomfield,CRF)模型初探1.条件随机场,一种特殊的概率图模型结构我们知道,从图结构角度来说,概率图模型可以分为以下两种:基于有向图的贝叶斯网:具备有向依赖性基于无向图的马尔科夫网:具备无向依赖性条件随机场是一个在变量子集上存在有......
  • 基于Python的HTTP代理爬虫开发初探
     在数字化时代,网络数据的获取对于企业和个人都变得至关重要。然而,许多网站为了保护其数据和资源,采取了反爬虫措施,使得我们无法直接访问和获取所需的信息。这时,HTTP代理爬虫就成为了一项强大的工具,它可以帮助我们绕过限制,有效地进行数据采集。在本文中,将介绍基于Python的HTTP代理......
  • 改造冰蝎对抗waf&OpenRASP计划-初探
     0x01前言在参考了各家waf对于多种姿势检测“冰蝎”的文章之后,产生了改造冰蝎的想法,目前主要的检测手段为针对冰蝎的流量特征进行匹配,所以我们的反侦探手段为改变冰蝎的流量特征以达到绕过的目的,由于@rebeyond大佬没有开源冰蝎代码,所以得反编译。那么思路来了,第一:反编译冰蝎,得到......
  • SAP为销售订单生成包装建议的BAPI (Packing Proposal for Sales Order)
    关于装箱打包,网上大部分资料都是交货单相关的。最近要做销售订单的包装建议更新,没查到资料,于是调试看了VA02的代码,发现以下几个函数可以用于SO包装建议的更新: V51P_FILL_GT:用于填充一些销售订单的基本数据,比如订单号,行项目等,这一步不做的话,下一个函数会无法运行V51P_PACKING......
  • 智能指针初探
    智能指针是C++11引入的,比裸指针更为强大的指针。主要作用是用来完成一定程度上的内存资源管理自动化。unique_ptrunique_ptr实现专属所有权功能。unique_ptr不允许拷贝,只允许移动,保证了没有其他的指针指向unique_ptr指向的对象。unique_ptr被析构时,其析构函数会主动析构所指向的......
  • shared_ptr包装this指针构造bug
    目录成员函数里用shared_ptr包装this指针,当shared_ptr析构了,就会调用this对象的析构函数,是非常可怕的事情。classA{voideat(){std::shared_ptrp(this);ptr->status="吃了";}}voidfunc(){Aa;a.eat();//eat里......