如何在spring boot mvc中执行请求之前修改Http头文件

时间:2018-05-26 13:57:44

标签: spring rest spring-mvc spring-boot

我有多个休息端点。 userId(http标头)在所有端点中都很常见。我想应用一个逻辑,假设未设置则设置其默认值,或者如果在请求进入方法之前在请求中提供,则修剪它(例如:heartbeat)。我们怎样才能在spring boot rest mvc中实现这个目标。

@RestController
public class MyResource {



        @RequestMapping(value = "/heartbeat", method= RequestMethod.GET)
        public String heartbeat (@RequestHeader (value="userId", required=false) String userId) 
        {
           ...
        }
    }

3 个答案:

答案 0 :(得分:1)

你可以试试吗?

@Configuration
@Slf4j
public class HttpHeaderModificationConfig implements Filter {

  private static final String HEADER_DEMO_NAME = "name";

  @Override
  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
      throws IOException, ServletException {
    final HttpServletRequest req = (HttpServletRequest) request;
    // modify HTTP Request Header
    final HttpServletRequestWrapper reqWrapper = new HttpServletRequestWrapper(req) {

      @Override
      public String getHeader(String name) {
        if (HEADER_DEMO_NAME.equals(name)) {
          return "Changed";
        }
        return super.getHeader(name);
      }
    };
    log.info("After Changed with Name {}", reqWrapper.getHeader(HEADER_DEMO_NAME));
    chain.doFilter(reqWrapper, response);
  }

}

答案 1 :(得分:0)

首先,您不应该以这种方式使用http标头。在您的情况下,在会话中存储/bin/sh -c /usr/bin/mongodb-mms-monitoring-agent -conf /etc/mongodb-mms/monitoring-agent.config >> /var/log/mongodb-mms/monitoring-agent.log 2>&1 /usr/bin/mongodb-mms-monitoring-agent -conf /etc/mongodb-mms/monitoring-agent.config 更为可取。

虽然你的目标可以通过使用拦截器来实现。以下是为每个请求设置标头的示例:

userId

答案 2 :(得分:0)

我可以考虑使用过滤器的一个选项,即创建一个过滤器以检查标题userId并对其进行修剪(如果它存在),或者提供一个默认值(如果它不存在)并将其存储在另一个标题中,可以说{ {1}}。在您的控制器中,您可以轻松地使用自定义标头,以确保它会根据您的要求有效。您可以参考下面的文章来创建通用bean

https://www.baeldung.com/spring-boot-add-filter