当前位置: 首页 > 知识库问答 >
问题:

使用Spring、Tomcat和Java,如何用HTTP头重定向请求?

祖迪
2023-03-14

所以我有一个org.springframework.stereoType.Controller,如果指定了HTTP头HA和HB,我想做的就是正常处理请求。但是,如果请求指定了查询参数QA和QB,我希望重定向请求而不使用QA或QB,而是使用HTTP头HA和HB,这样HA的值为QA,而HB的值为QB。

例如,如果传入的请求是HTTP GET~/REST/Mortgre,带有HTTP头X-NAME=Foo和X-DATE=BAR,我将按原样处理该请求。但是,如果传入的请求是HTTP GET~/REST/Mortgage?X-name=foo和X-date=bar,我希望使用HTTP头X-name=foo和X-date=bar的请求HTTP GET~/REST/Mortgage重定向到自己。

这可能吗?如果是,怎么做?

如果这是不可能的,我可以通过为HttpServletRequest定义我自己的包装器来实现我想要的结果,这个包装器为我执行转换,但这并不是一个优雅的解决方案。

共有1个答案

郎曾笑
2023-03-14

如果要拦截HTTP请求,需要使用Servlet过滤器

为了替换URL,您必须获得新URL的分派器,然后使用forward()方法再次分派请求。

类似于这样:

servletRequest.getRequestDispatcher(modifiedURL)
              .forward(servletRequest, servletResponse);
WrappedServletRequest wrappedServletRequest = 
                                     new WrappedServletRequest(servletRequest);
wrappedServletRequest.addHeader("yourHeader", "yourValue");

wrappedServletRequest.getRequestDispatcher(modifiedURL)
              .forward(wrappedServletRequest, servletResponse);

我自己没有尝试过,所以请在下面评论并确认你是否能成功使用它。

 类似资料:
  • 问题内容: 我有一个同时侦听HTTP和HTTPS的Spring Security版本3.2.3应用程序。我希望对HTTP端口的任何请求都重定向到HTTPS。如何仅使用Java进行配置? Spring Security javadoc for提出了以下解决方案(针对基本要求): 但是,这不起作用,因为没有方法。 问题答案: 更换用在问题的代码似乎得到期望的行为。然后,工作代码如下所示:

  • 我使用的是 Java 7、Spring靴 1.1.7 和一个带有嵌入式的 Tomcat 7。 过去,当我使用独立Tomcat时,我会添加一个http连接器,将请求重定向到HTTPS端口: 当我使用嵌入的Tomcat(我没有服务器.xml文件)时,我该怎么做?

  • 我正在配置Tomcat以支持HTTP(端口8080)和HTTPS(端口8443)。server.xml,如果我这样配置: 对超文本传输协议://SERVER_IP: 8080的所有访问都将定向到https://SERVER_IP: 8443。如何禁用重定向,并允许超文本传输协议和https访问? 我尝试删除,但它不起作用。

  • 我将spring saml扩展与Apache2.2+Tomcat7.0+OKTA(IdP)一起使用。securitycontext.xml如下所示: MetadataGeneratorFilter: 谢谢 奈良 HTTP请求转储:

  • 问题内容: 有谁知道如何使用JavaScript或jQuery添加或创建自定义HTTP标头? 问题答案: 根据您的需求,有几种解决方案… 如果要向 单个请求添加自定义标头(或标头集), 则只需添加属性: 如果要向 每个请求添加默认标头(或标头集),请 使用: 如果 要向每个请求添加标头(或标头集), 则将钩子与一起使用: 编辑(更多信息): 要注意的一件事情是,您只能定义一组默认标头,而只能定义一