我了解到总会有一个令牌基本上粘在请求上,现在我想找回令牌并卡住,不胜感激。谢谢
@GetMapping("/current")
public ResponseEntity<UserDto> getCurrent() {
return ResponseEntity.ok(something);
}
在方法主体中,我可能会实现另一种服务,例如,构造函数将令牌作为参数,然后进行一些相等性检查。
答案 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/