如何从请求中检索令牌

时间:2020-09-02 11:32:17

标签: java spring token

我了解到总会有一个令牌基本上粘在请求上,现在我想找回令牌并卡住,不胜感激。谢谢

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

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

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:1)

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

我将尽力回答您的问题:

例如,您有一些仅适用于注册用户的选项。如果您使用的是jwt security,则会为用户生成令牌,然后将其“粘”在一起以请求/响应标题

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

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

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

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

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

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