他怎么知道我的请求头?

neskvpey  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(270)

所以我为自己找到了一个有趣的问题,我无法回答。这里我有一个控制器,具有处理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中删除令牌。然后从headers对象中删除header“authorization”。所以问题是,它如何从我的请求中获取头文件?我不是从头开始示例化了一个对象吗?
我假设它是自动完成的,但我在哪里可以读到它,所以将来我不会面对这样的问题?
谢谢!

kmynzznz

kmynzznz1#

这里没有Spring的魔力,只有坏的开发者巫毒。
HttpHeaders headers = new HttpHeaders(); 创建一个空标题,调用 headers.remove(AUTH); 不会做任何事,因为没有东西可以移走。
所以不管怎样 logout(token) 返回,则此方法将返回空标头。由于空头没有auth头,这看起来像是代码“删除”了auth头,但这只是一个副作用。代码看起来像是在做什么,碰巧行为也差不多。
如果你能 logout() 失败时,您会注意到也没有auth头,即使它应该只有在成功注销时才被删除。
也许你想在方法中注入完整的头文件?

public ResponseEntity<AuthResponse> logout(@RequestHeader HttpHeaders headers) {

相关问题