他怎么知道我的请求headers?
How does he knows about my request headers?
所以我为自己找到了一个有趣的问题,但我无法回答。这里我有一个 Controller 方法来处理 POST request:
@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 从数据库中删除令牌。然后 header“授权”从 headers object 中删除。所以问题是,我的请求如何花费 headers?我不是从头开始实例化了一个 object 吗?
我假设它是自动完成的,但我可以在哪里阅读它,所以以后我不会遇到这样的问题?
非常感谢!
这里没有 Spring 魔法,只有糟糕的开发者巫术。
因为 HttpHeaders headers = new HttpHeaders();
创建了一个 empty header,调用 headers.remove(AUTH);
不会做任何事情,因为没有任何东西可以删除。
所以无论logout(token)
returns是什么,这个方法都会返回空的headers。由于空 header 没有 AUTH header,这看起来像是代码“删除”了 AUTH header,但这只是副作用。代码看起来像是在做某事,一不小心行为就差不多了。
如果您使 logout()
失败,您会注意到也没有 AUTH header,即使它应该只在成功注销时被删除。
也许您想在方法中注入完整的 headers?
public ResponseEntity<AuthResponse> logout(@RequestHeader HttpHeaders headers) {
所以我为自己找到了一个有趣的问题,但我无法回答。这里我有一个 Controller 方法来处理 POST request:
@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 从数据库中删除令牌。然后 header“授权”从 headers object 中删除。所以问题是,我的请求如何花费 headers?我不是从头开始实例化了一个 object 吗?
我假设它是自动完成的,但我可以在哪里阅读它,所以以后我不会遇到这样的问题?
非常感谢!
这里没有 Spring 魔法,只有糟糕的开发者巫术。
因为 HttpHeaders headers = new HttpHeaders();
创建了一个 empty header,调用 headers.remove(AUTH);
不会做任何事情,因为没有任何东西可以删除。
所以无论logout(token)
returns是什么,这个方法都会返回空的headers。由于空 header 没有 AUTH header,这看起来像是代码“删除”了 AUTH header,但这只是副作用。代码看起来像是在做某事,一不小心行为就差不多了。
如果您使 logout()
失败,您会注意到也没有 AUTH header,即使它应该只在成功注销时被删除。
也许您想在方法中注入完整的 headers?
public ResponseEntity<AuthResponse> logout(@RequestHeader HttpHeaders headers) {