如何在 Spring Boot 中使用 Authentication Basic 获取作为 header 发送的访问令牌

How to get the access token sent in as header with Autentication Basic in Springboot

我已经完成了大部分项目,但现在我遇到了一个新问题。我必须从 Authentication Basic 中 header 中的请求中提取访问令牌。这令人困惑,因为首先我使用了一个简单的 GET 方法,并在请求本身中发送访问令牌并使用 @RequestParam 提取它。我之前问过一个类似的问题,但那是针对请求本身的简单请求,现在我必须从 header.

 @GetMapping("/persons")
     public String loadPersons(@RequestParam("access_token") String access_token) throws  ParseException{
        String decode_token = pd.testDecodeJWT(access_token);
        String token = pd.jsondata(decode_token);
........................ More Code........................

我想从身份验证基本格式的请求中获取该令牌。

我尝试了一些 YouTube 教程,但由于我几乎已经完成了我的项目,所以我想对其进行最少的更改,以免弹出更多错误。

提前致谢

要从 HTTP header 获取值,您可以使用 @RequestHeader("headerValue") .

但是你的问题让我感到困惑的是你使用的是基本身份验证还是 JWT? Basic Authentication 仅与用户名和密码有关,与访问令牌无关。它需要格式为 :

的 HTTP header
Authorization: Basic <credentials>

其中 <credentials>Base64Encode(username:password)

另一方面,如果您使用 JWT 格式的访问令牌,通常的做法是在 "Authorization" header 中使用 Bearer :

Authorization: Bearer <JWT>

所以无论你使用什么,我的建议是先使用@RequestHeader("Authorization")获取Authorizationheader的值。然后根据你的实际身份验证机制解码值:

 @GetMapping("/persons")
 public String loadPersons(@RequestHeader("Authorization") String authHeader) throws  ParseException{
      //decode authHeader
}