banner
指数爆炸

指数爆炸

我做了对饭 !
github
bilibili

Nginx 鉴权時、チェックされるのはアプリケーションレベルのステータスコードではありません。

当我们使用 nginx 的auth_request指令进行鉴权时,并不会检查 HTTP 响应的主体的状态码,它只关心 HTTP 响应的状态码


  • 应用级别的状态码:使用自己 Result 对象封装的状态码,它们在响应时被包含在 HTTP 响应的主体中
import app.xlog.ggbond.utils.Result;

@GetMapping("/verify")
public Result<String> verify(String token) {
    logger.atInfo().log("token: {}", token);
    if (token.equals("success")) {
        logger.atInfo().log("请求成功");
        return Result.buildResult(Result.Status.OK, "success");
    } else {
        return Result.buildResult(Result.Status.BAD_REQUEST);
    }
}
  • 非应用级别的 HTTP 状态码:使用 ResponseEntity 对象,其中 HTTP 状态码是 HTTP 响应的一部分,它被单独发送,并且在任何 HTTP 响应主体之前
import org.springframework.http.ResponseEntity;

@GetMapping("/verify")
public ResponseEntity<String> verify(String token) {
    logger.atInfo().log("token: {}", token);
    if (token.equals("success")) {
        logger.atInfo().log("请求成功");
        return ResponseEntity.ok("success");
    } else {
        return ResponseEntity.status(403).body("forbidden");
    }
}

即使返回的 Result 对象包含一个 "403" 的状态码,但是其实还是请求成功了,所以 Nginx 的 auth_request 指令仍然会认为验证成功

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。