【问题标题】:How to get JWT Token from RequestHeader如何从 RequestHeader 获取 JWT 令牌
【发布时间】:2020-07-27 07:35:42
【问题描述】:

我尝试从 getrequest 的标头中获取我的不记名令牌。如果我想显示令牌,则返回 NULL。有谁知道为什么我没有得到令牌?

public String sendSmsToCustomer(HttpServletRequest request, @PathVariable("name") String name,@PathVariable("customer_phone_number") String customer_phone_number, @PathVariable("text") String text) throws Exception
            {
            String user = request.getHeader("Authorization");
            System.out.println(user);

更新 1

public static String getUsernameFromToken(HttpServletRequest request) {
        String token = request.getHeader(HEADER_STRING);
        String user = null;
        if (token != null) {
            // parse the token.

            try {
                user = Jwts.parser()
                        .setSigningKey(SECRET)
                        .parseClaimsJws(token.replace(TOKEN_PREFIX, ""))
                        .getBody()
                        .getSubject();


            } catch (Exception e) {

                throw e;

            }
            return user;
        }
        else
        return null;
    }

更新 2

        @GetMapping("/contacts/token")
            public String getToken(HttpServletRequest request) throws Exception
            {
            String user = request.getHeader(HEADER_STRING);
            System.out.println(user);
            return user;
            }

更新 3 获得完整的标头输出后,我看到“授权”不可用。

{
    "x-forwarded-host": "localhost:8800",
    "x-forwarded-proto": "http",
    "x-forwarded-prefix": "/contacts",
    "postman-token": "081ea72c-e270-46db-8703-e5afc9887ba1",
    "host": "localhost:8100",
    "x-forwarded-port": "8800",
    "content-type": "application/json",
    "connection": "Keep-Alive",
    "x-forwarded-for": "0:0:0:0:0:0:0:1",
    "accept-encoding": "gzip, deflate, br",
    "user-agent": "PostmanRuntime/7.26.2",
    "accept": "*/*"
}

因此我也无法在那里找到令牌。也许是我的依赖?我只集成了令牌的 jjwt 依赖项。有没有人有办法解决吗?在这个 bug 上坐了几个小时

【问题讨论】:

  • 你能提供发送到服务器的请求吗?也许令牌不在里面?尝试使用 Postman 或 junit 测试之类的东西,您将能够更轻松地重现此行为
  • 我已经与邮递员合作并且所有请求都有效,现在我想安装一个令牌增强器,为此我必须获得令牌
  • 所有请求工作是什么意思?你能得到除此之外的其他请求的标头吗?
  • 对于所有其他请求,我不需要令牌。所以他们正在工作,我可以用令牌抛出 api 网关。
  • 您是否尝试过隔离问题?例如,您是否能够获得不带其他参数的方法的令牌?也许您启用了具有副作用的安全参数......我已经能够像您一样在标题“授权”中获得一个令牌,它对我来说效果很好。所以尝试隔离问题

标签: java spring-boot http-headers


【解决方案1】:

您应该向我们提供您发送的请求,以检查令牌是否已发送。 也许您也可以尝试通过添加此标头来接收它

@RequestHeader("Authorization") String token

【讨论】:

  • 我也试过这种方式,但是getHeader方法在那之后就不起作用了
  • 我改变了它现在我得到了这个错误 2020-07-27 09:44:54.805 WARN 13012 --- [nio-8100-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : 已解决 [org.springframework. web.bind.MissingRequestHeaderException:缺少字符串类型的方法参数的请求标头“授权”]
  • 好的,所以您没有发送标头名称为 Authorization 的令牌,请再次检查您的请求。在邮递员中,您是否在“授权”选项卡中使用“承载令牌”类型发送令牌?
  • 是的,我正在发送不记名令牌。我用我的邮递员获取请求更新了一张图片
  • 不知道是不是因为你在header面板中发送的,但是尝试在Authorization面板中用“Bearer token option”发送token
【解决方案2】:

如果request是Request对象,那么你可以这样做:

request.getHeader(HttpHeaders.AUTHORIZATION);

【讨论】:

    猜你喜欢
    • 2017-05-26
    • 2021-07-12
    • 2021-01-19
    • 2018-01-13
    • 2020-05-05
    • 2019-05-22
    • 2021-07-05
    • 2018-01-09
    • 2021-04-20
    相关资源
    最近更新 更多