我正在开发用于用户身份验证的限制登录功能。嗯,我有一个单页应用程序,该 SPA 使用 Spring Boot 开发的 REST API。在 API 中,它使用 @RequestHeader 注释。
我想了解为什么我们需要使用 @RequestHeader 注解以及使用它的真实用例以及我们需要遵循哪些最佳实践来使用它?
@PostMapping(value = "/first-time/user")
public UserLoggedInInformation firstTimeAuthenticate(@Valid @NotNull
@RequestBody UserPasswordData userPasswordData,
@RequestHeader(value = "x-client-id",required = false) String xClientId,
@RequestHeader(value = "x-b2b-domain",required = false) String domain) {
log.debug("Rest Request to check first time user : {} from Application: {} and Domain: {}",userPasswordData,xClientId,domain);
return authenticationOperations.authenticateFirstTime(xClientId,domain,userPasswordData.getUsername(),userPasswordData.getPassword());
}
当您想在 Spring Rest Controller 中访问 HTTP headers 时,您需要使用 @RequestHeader。 HTTP 标头的目的是除了在 HTTP 正文中发送的实际逻辑信息之外,还将元数据信息发送到服务器(以及对客户端的响应)。 您可以在以下位置查看其用途:Wiki
您可以在此处了解使用 Spring Rest 控制器的 http 标头: Spring Rest 控制器 http 标头
更好的问题是在开发 REST API 时“何时”使用 @RequestHeader(当我们可以使用 @RequestBody 或 @RequestParam 轻松发送数据时)
尽管如此,只要整个应用程序需要一条信息,并且该信息在整个生命周期中不会随着业务上下文的变化而变化,那么它就是 @RequestHeader 的良好候选者。
但是,如果您的信息在非常本地化的上下文中需要或用途有限,那么您应该遵循通过 @RequestBody 或 @RequestParam 路由请求它的一般方式。
总而言之,可以(应该)通过 @RequestHeader 访问一致且整个应用程序全局需要的数据。