删除控制器/类中的 HttpServletRequest 参数的最佳方法?

2023-11-22

我有一个情况,我需要将 HTTP 请求对象重定向到其他控制器/类以进行进一步处理。问题是,在某些控制器中,我想更好地控制我转发到下一个类的参数:修改、编辑、删除它们。所以,我想知道是否有一个好的实践/模式来实现对 HTTP 请求参数的基本控制。


好的做法是使用 servlet 过滤器将请求对象包装在另一个对象中。由于 HttpServletRequest 是一个接口,因此您可以编写自己的实现。您的实现可以保存收到的请求,并将其自己的任何和所有方法委托给原始请求对象,还可以根据需要修改返回值。因此,您的 getParameter() 等方法可以在原始请求对象上调用相同的方法,并在返回结果之前根据您的需要修改结果。

class MyHttpServletRequestWrapper implements HttpServletRequest {
   private HttpServletRequest originalRequest;

   public MyHttpServletRequestWrapper(HttpServletRequest originalRequest) {
      this.originalRequest = originalRequest;

   public String getAuthType() {return originalRequest.getAuthType();}
   public String getQueryString() {return originalRequest.getQueryString();}
   // etc.

   public Map getParameterMap() {
      Map params = originalRequest.getParameterMap();
      params.remove("parameter-to-remove");
      params.put("parameter-to-add", "<a value>");
      //etc.
   }
}

您的 servlet 过滤器:

class MyFilter implements Filter {
    public void init(FilterConfig config) {
       // perhaps you might want to initialize something here
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
        HttpServletRequest originalRequest = (HttpServletRequest) request;
        HttpServletRequest newRequest = new MyHttpServletRequest(originalRequest);
        chain.doFilter(newRequest, response);
    }
}

您还可以子类化 javax.servlet.request.HttpServletRequestWrapper,这将为您节省大量工作。

看到这个post了解更多。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

删除控制器/类中的 HttpServletRequest 参数的最佳方法? 的相关文章

随机推荐

  • 服务器模式 GC 似乎从不收集 Gen 0 堆

    澄清的问题 tl dr 在阅读并分析了下面涵盖的所有结果后 问题似乎归结为 GC 在服务器模式下没有为我们的应用程序收集 Gen 0 堆 一旦更改为工作站模式 问题就会消失 原始问题和详细信息 我的问题与以下内容有些相关 这个问题 and
  • 从 Swift 调用 getsectiondata

    此问答描述了如何在现代 OS X macOS 版本上使用 Objective C 从 Mach O 部分读取数据 从 getectbyname 读取字节时发生崩溃 所描述的答案有效 我正在尝试用 Swift 实现同样的事情 我无法让它发挥作
  • 更改 root 密码后 PHPMyAdmin 无法连接

    我安装了 Xampp 适用于 Windows 我很高兴使用它的所有功能 然后我想更改MySql密码 我设置了一个随机生成的密码 rCZ4Xnz78zbLY2Vh 然后 PHPMyAdmin 停止登录 它开始给出以下错误消息 此后一直如此 E
  • 如何修复错误:无法注册具有相同名称的 2 个指标:/tensorflow/api/keras/optimizers

    当我尝试利用 TensorFlow 库运行用于深度学习的 Python 代码时 出现以下错误 2021 10 24 10 07 13 619481 W tensorflow stream executor platform default
  • gt table - 单元格中的换行符

    我尝试使用 R gt 包在 gt 单元格中强制换行 在 gt 文档中 描述了可以使用以下方法对列标签执行此操作cols label example gt tbl gt cols label col html text1 br text2 但
  • 首次启动应用程序时显示对话框

    有没有一种简单的方法可以在程序第一次启动 并且只是第一次 时显示对话框 以进行某种指令或指定设置 您可以将其保存为设置中的布尔值 并且应该检查第一个表单的加载事件 您的设置文件应该有一个我称为 FirstRun 的设置 请按照以下步骤操作
  • R中两个变量的直方图

    我有两个变量想要在直方图中进行比较 如下所示 对于直方图的每个箱 都会显示两个变量的频率 这使得比较它们变得很容易 您可以使用add参数为hist see hist plot histogram hist rnorm 1000 mean 0
  • Magento - 如何将分层导航添加到高级搜索?

    如何将分层导航添加到高级搜索结果页面 Magento 版本 1 7 下面的补丁将在高级搜索结果中显示分层导航 并且可以与分层导航配合良好 分层导航和搜索结果基于两个单独的产品集合显示 其中一个由目录搜索 模型 Layer php另一个由目录
  • 如何在 Libgdx 中跟踪多个触摸事件?

    我正在使用 Libgdx 制作赛车游戏 我想触摸屏幕的右侧一半来加速 同时在不删除先前触摸点的情况下再次触摸屏幕左侧的另一个触摸点来射击 我无法检测到后来的接触点 我已经搜索并得到Gdx input isTouched int index
  • Windows 视觉主题:零件和状态库?

    Microsoft Windows 允许程序员使用当前主题的外观和感觉 使用诸如DrawThemeBackground and DrawThemeText 这些元素由类 零件和状态指定 如零件和状态MSDN 页面 不幸的是 该页面的信息并不
  • Spring配置@ResponseBody JSON格式

    想象一下我在 Spring 3 Controller 中有这个带注释的方法 RequestMapping public ResponseBody MyObject index RequestBody OtherObject obj MyOb
  • 如何在IntelliJ IDEA中查看JavaDoc? [复制]

    这个问题在这里已经有答案了 I just switched from Eclipse to IntelliJ IntelliJ lacks one feature from Eclipse when you put your mouse o
  • 如何在 Java 中将整数转换为本地化的月份名称?

    我得到一个整数 我需要转换为各种语言环境中的月份名称 区域设置 en us 的示例 1 gt 一月2 gt 二月 区域设置 es mx 的示例 1 gt 埃内罗2 gt 费布雷罗 import java text DateFormatSym
  • Jmeter 的 WebSocket 插件 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 有人可以与我分享 JMeter Websocket 协议插件采样器的链接吗 我尝试从下面的链接安装 https github com kawasim
  • 错误:管道损坏/MySQL 服务器已消失

    MySQL 抛出 Broken Pipe 和 MySQL Server has gone gone 错误 我的数据库表包含文本字段 我每隔 1 小时定期在其中插入大型 HTML 我应该考虑设置哪个 MySQL 变量 这是当前配置 mysql
  • C语言的unicode你好世界?

    我正在尝试从 C 输出 蠀 等内容 include
  • 启动和停止来自广播接收器的通知

    我正在尝试从广播接收器启动状态栏通知 然后从另一个广播接收器停止它 但我遇到了问题 我想在 USB 连接时在状态栏中启动通知 然后在 USB 断开连接时我想停止它 我设置了两个接收器并正在工作 只是在从接收器启动和停止一个接收器方面遇到困难
  • 如何从 DatePickerDialog 获取 DatePicker?

    我有一个活动弹出 android app DatePickerDialog DatePickerDialog dialog new DatePickerDialog this startDateSetListener start cal g
  • 固定页眉

    我以前从未处理过 CSS 但现在我必须处理 我正在开发一些 HTML 代码 一个网站的草图 并且有 CSS 问题 我希望我的标题位于固定位置 我的意思是它始终应该位于网站的顶部 即使有太多内容以至于网站必须滚动才能看到所有内容 我尝试过一些
  • 删除控制器/类中的 HttpServletRequest 参数的最佳方法?

    我有一个情况 我需要将 HTTP 请求对象重定向到其他控制器 类以进行进一步处理 问题是 在某些控制器中 我想更好地控制我转发到下一个类的参数 修改 编辑 删除它们 所以 我想知道是否有一个好的实践 模式来实现对 HTTP 请求参数的基本控