Skip to content

근로자 공개 링크(worker-portal) API 3개가 /api/v1 접두사 누락으로 클라이언트에서 전부 접근 불가 #148

Description

@BcKmini

문제

라이브 시나리오 테스트 중, 방금 발급한 근로자 보안 링크를 실제로 /worker-portal/{token}으로 열어보면 "요청 내용을 불러오지 못했습니다"만 뜬다. 근로자 문서 제출·응답이라는 핵심 기능이 데모/로컬 환경에서 완전히 동작하지 않는다.

재현:

POST /api/v1/tasks/{taskId}/worker-link 로 링크 발급 → worker_url = http://localhost:5173/worker-portal/{token}
GET /api/v1/public/worker-links/{token} → 401(비로그인) 또는 404(로그인 상태)
GET /public/worker-links/{token} (버전 접두사 없이) → 200 정상 응답

원인

다음 3개 컨트롤러의 @RequestMapping/@PostMapping 경로가 다른 모든 컨트롤러와 달리 /api/v1 접두사 없이 정의되어 있다.

  • WorkerLinkViewControllerGET /public/worker-links/{token} (should be /api/v1/public/worker-links/{token})
  • WorkerLinkDocumentControllerPOST /public/worker-links/{token}/documents
  • WorkerResponseControllerPOST /public/worker-links/{token}/responses

SecurityConfigpermitAll 매처도 똑같이 /public/worker-links/**로 접두사 없이 정의돼 있어, 실제 클라이언트가 호출하는 /api/v1/public/worker-links/** 경로는 permitAll 규칙에 매칭되지 않고 hasAnyRole(...) 규칙으로 떨어져 로그인을 요구한다(근로자는 비로그인 상태이므로 접근 불가).

클라이언트(src/api/workerLinks.ts)는 처음부터 /api/v1/public/worker-links/...로 호출하고 있었고, 서버 통합 테스트(WorkerLinkSecurityIntegrationTest, PostgreSqlRestrictedRoleHttpE2ETest)는 접두사 없는 잘못된 경로를 그대로 테스트해서 이 불일치를 잡아내지 못했다.

영향

근로자가 SMS/링크로 받는 안내 조회, 서류 업로드, 응답 제출 — 근로자 대응 흐름 전체가 실제 배포 환경에서 동작하지 않는다. Critical.

수정 방향

  • 3개 컨트롤러 매핑에 /api/v1 접두사 추가

  • SecurityConfig의 permitAll 매처를 /api/v1/public/worker-links/**로 수정

  • 관련 통합 테스트의 경로 상수 갱신

  • 라이브 브라우저 테스트로 재현, 원인 특정

  • 컨트롤러·시큐리티 설정 수정

  • 관련 테스트 경로 갱신, 전체 테스트 통과 확인

  • 라이브 브라우저로 근로자 링크 조회 재확인

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions