【问题标题】:How to retrieve a token from a request如何从请求中检索令牌
【发布时间】:2020-09-02 11:32:17
【问题描述】:

我知道总是有一个令牌基本上粘在请求上,现在我想检索一个令牌并卡住,不胜感激。谢谢

  @GetMapping("/current")
public ResponseEntity<UserDto> getCurrent() {
 
    return ResponseEntity.ok(something);
}

在方法主体中,我可能会实现另一个服务,例如,构造函数将令牌作为参数,然后进行一些相等性检查。

【问题讨论】:

  • 您提到的是哪个令牌?如果您可以在帖子中添加额外的详细信息以及您的请求/处理程序的示例,我们将不胜感激。
  • 要回答您的问题,我们必须知道您如何随请求发送令牌。您是否将Authorization 标头中的令牌作为bearer 令牌发送?
  • @mahfujasif 完全正确,对不起,是的,完全是通过授权标头

标签: java spring token


【解决方案1】:

在您的控制器中接受HttpServletRequest。然后你可以从中提取任何标题。

  @GetMapping("/current")
  public ResponseEntity<UserDto> getCurrent(HttpServletRequest request) {
    String token = request.getHeader("Authorization");
    return ResponseEntity.ok(something);
  }

如果你不想从控制器中获取HttpServletRequest,你可以像这样Autowire

@Autowired
private HttpServletRequest request;

或执行以下操作

HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();

【讨论】:

  • 你知道是否有办法在不接受 HttpServlet 作为参数的情况下检索它?
  • 检查编辑后的版本,如果有帮助,请考虑投票
  • 谢谢,我知道它可以是构造函数的一部分,但我问的原因是因为我有使用该方法的测试,我不想在那里改变任何东西,但看起来我会必须这样做。我希望有一些静态方法:D
【解决方案2】:

你的问题很难理解。你的“令牌”可以是任何东西。

我会尽量回答你的问题:

例如,您有一些仅适用于注册用户的选项。如果您使用 jwt 安全性,则为用户生成令牌并将它们“粘合”到请求/响应标头

例如(这是我当前的 jUnit 测试):

protected MockHttpServletRequestBuilder getAuth(String url) {
    return MockMvcRequestBuilders.get(url).header("Authorization", this.token);
}

并且令牌是使用 jwt 安全性生成的,生成后我可以将其“粘合”到标题上。我可以检查标题中的内容并获取令牌值。

所以要检查或获取此令牌,您必须检查标题中的内容,就这么简单:)

这是一个非常笼统的例子。但主要思想是: 如果你添加一些东西 - 你可以得到一些东西。但是,如果您还没有生成令牌 - 您将不会“默认”获得一个令牌,因为没有令牌,java 不会为任何请求生成令牌。这是您必须首先创建的东西。

如果您对我所说的内容不满意 - 请从这里开始: https://jwt.io/introduction/

【讨论】:

  • 最好的祝愿,令牌及其处理是一个非常有趣的话题:) 如果我的回答有用 - 你可以标记它,这样其他人就会知道它很有用
猜你喜欢
  • 2020-02-21
  • 2019-11-21
  • 2016-06-27
  • 2012-04-22
  • 2019-06-26
  • 2019-06-22
  • 2018-07-27
  • 2016-03-31
  • 2017-01-09
相关资源
最近更新 更多