spring - 如何在spring boot mvc中执行请求之前修改Http headers

标签 spring rest spring-mvc spring-boot

我有多个休息端点。 userId(http header )在所有端点中都是通用的。我想应用一个逻辑,假设如果未提供则设置其默认值,或者如果在请求进入方法之前在请求中提供则修剪它(例如:心跳)。我们如何在 spring boot rest mvc 中实现这一点。

@RestController
public class MyResource {



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

最佳答案

你能试试这个吗?

@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);
  }

}

关于spring - 如何在spring boot mvc中执行请求之前修改Http headers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50543520/

相关文章:

android - 使用 EventBus 或 Otto 时减少事件类的数量

ruby-on-rails - 如何克服 Rails 中明显的 REST 与 DRY 困境?

rest - 为什么 Golang grpc-gateway 的 GET 路由匹配 POST 请求?

spring - 在 Spring MVC 和 Hibernate 应用程序的 JSP 页面中实现分页

spring-mvc - 从类路径解析 spring MVC View

java - Spring Boot + SPring REST + Swagger + JPA + 内存中 H2 DB

java - 如何使用注释将作业参数传递给项目处理器

java - 调用存储过程的批处理应用程序的正确 block 大小是多少?

java - 在测试期间注入(inject)@Autowired 私有(private)字段

facebook - Spring social ConnectController/connect/facebook 给出 404 错误