如何从请求中检索令牌

How to retrieve a token from a request

我知道总有一个令牌基本上粘在请求上,现在我想检索一个令牌并卡住,希望能有一些想法。谢谢

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

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

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

  @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();

你的问题比较难懂。您的“令牌”可以是任何东西。

我会尽量回答你的问题:

例如,您有一些选项仅供注册用户使用。如果您使用的是 jwt 安全性,则为用户生成令牌并将它们“粘合”到 request/response headers

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

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

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

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

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

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