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 指令仍然會認為驗證成功

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。