【发布时间】:2020-11-17 10:00:32
【问题描述】:
所以我为自己找到了一个有趣的问题,我无法回答。这里我有一个控制器,它带有处理 POST 请求的方法:
@CrossOrigin("*")
@PostMapping("/signout")
@ResponseBody
public ResponseEntity<AuthResponse> logout(@RequestHeader(value = AUTH) String token) {
HttpHeaders headers = new HttpHeaders();
if (loginningService.logout(token)) {
headers.remove(AUTH);
return new ResponseEntity<>(new AuthResponse("logged out"), headers, HttpStatus.CREATED);
}
return new ResponseEntity<>(new AuthResponse("Logout failed"), headers, HttpStatus.NOT_MODIFIED);
}
这里创建了 HttpHeader 实例,然后 loginningService 从 DB 中删除了令牌。然后从标头对象中删除标头“授权”。所以问题是,它如何从我的请求中获取标头?我不是从头开始实例化一个对象吗?
我假设它是自动完成的,但是我可以在哪里阅读它,所以将来我不会遇到这样的问题?
非常感谢!
【问题讨论】:
-
只是想知道,
curl会为您的 POST 请求生成什么? -
headers对象是否包含Authorization标头在您删除它之前?请求Authorization标头不应自动复制到响应标头中。 -
没有被删除。在新建的HttpHeaders 中没有要删除的标题。该代码是偶然起作用的,因为它无论如何都会返回空标题。糟糕的代码,没有什么“神奇”的事情发生。
-
您周围是否还有任何请求/响应拦截器或网络过滤器?
-
@fluffy 他们将如何影响在空的
headers上调用headers.remove(AUTH);?在实例化一个局部变量和执行一个无用的操作之间,没有什么可以拦截发生的事情。
标签: java spring-boot http-headers http-post