AuthController.java

역할

1. 로그인 API (/login)

    // 로그인
    @PostMapping("/login")
    public ResponseEntity<?> login(@Valid @RequestBody LoginRequest request, HttpServletResponse res) {
        // 로그인 수행 후 access + refresh 토큰 발급
        Tokens tokens = authService.login(request.email(), request.password());

        // refreshToken 쿠키 저장 (HttpOnly + Secure + SameSite 필요)
        CookieUtil.addHttpOnlyCookie(res, "refreshToken", tokens.refreshToken(), 10080);

        // accessToken 반환
        return ResponseEntity.ok(Map.of("accessToken", tokens.accessToken()));
    }

설명:


2. 토큰 갱신 API (/refresh)

    // 토큰 갱신
    @PostMapping("/refresh")
    public ResponseEntity<?> refresh(HttpServletRequest req, HttpServletResponse res) {

        // 요청 쿠키에서 refreshToken 읽기
        String refreshToken = CookieUtil.readCookie(req, "refreshToken");

        // 쿠키 자체가 없으면 = 비로그인 상태
        if (refreshToken == null) {
            // ApiException을 던져서 글로벌 핸들러에서 처리
            throw new ApiException(ErrorCode.UNAUTHORIZED);
        }

        // refreshToken 유효하면 회전된 access + refresh 발급
        Tokens tokens = authService.refresh(refreshToken);

        // 새 refresh 쿠키 재설정
        CookieUtil.addHttpOnlyCookie(res, "refreshToken", tokens.refreshToken(), 10080);

        // 새로운 accessToken 반환
        return ResponseEntity.ok(Map.of("accessToken", tokens.accessToken()));
    }

설명: