개발자로 후회없는 삶 살기

spring PART.postman으로 login 테스트 할 때 받아온 토큰을 요청 헤더에 자동으로 넣는 방법 본문

[백엔드]/[spring+JPA | 이슈해결]

spring PART.postman으로 login 테스트 할 때 받아온 토큰을 요청 헤더에 자동으로 넣는 방법

몽이장쥰 2023. 8. 18. 18:21

서론

포스트맨 요청 헤더에 토큰을 자동으로 넣는 방법을 다룹니다.

 

본론

스프링과 포스트맨으로 프로젝트를 진행하다보면 로그인 이후 받아온 토큰을 계속 사용해서 이후 요청을 해야할 때가 있습니다.

 

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    final String token = AuthorizationExtractor.extract(request);
    Long id = Long.valueOf(jwtTokenProvider.getPayload(token));

    Student findStudent = studentRepository.findById(id)
            .orElseThrow(() -> new NoSuchMemberException(id));
    validateRoleType(findStudent);

    return true;
}

저 같은 경우에는 관리자 권한이 있어야만 접근할 수 있는 페이지가 있었는데 관리자로 로그인 한 후 또 다른 요청시 토큰에 있는 id로 관리자인지 확인하는 과정이 필요했습니다. 토큰을 찾고 찾은 토큰을 복호화한 후

 

private static void validateRoleType(Student findStudent) {
    if (findStudent.getRoleType() != RoleType.ADMIN) {
        throw new InvalidRoleTypeException(findStudent.getLoginId());
    }
}

ADMIN이 아니면 예외를 터뜨리는 인터셉터를 만들었습니다.

 

커밋 전에는 항상 테스트 ✅

인터셉터를 테스트 하기 위해서 포스트맨으로 요청을 보내려고 했습니다. 하지만 위 테스트는 일반 테스트와 다르게 요청에 미리 토큰이 준비가 되어있어야 합니다. 왜냐하면 토큰에서 id를 복화하하기 때문입니다.

 

따라서 최초 로그인 할 때 얻은 토큰을 이후 요청에서 사용해야하고 그러한 기능을 포스트맨에서 제공합니다.

 

1. 토큰을 받아올 요청 URL 셋팅

이 작업은 토큰을 받아오는 작업으로 저는 로그인 이후 토큰을 받아오기 위해 로그인 API로 셋팅했습니다.

 

2. 환경 설정

가져온 토큰을 key-value 형태로 저장할 것입니다. Variable에 key로 사용할 명칭을 적어줍니다. 저는 accessToken이라고 하였습니다. 로그인 이후 Current value에 토큰이 들어갈 것입니다.

 

오른쪽 표시한 부분도 변경해 주어야 합니다.

 

3. Tests 설정

var data = JSON.parse(responseBody);
pm.environment.set("accessToken", data.accessToken)

 

받아온 응답에서 토큰을 추출하는 코드를 Tests에 적어줍니다.

 

저 같은 경우는 response로 accessToken이라는 키를 사용합니다. set()에 키를 환경 셋팅에 사용한 것으로 하고 data에 response로 넘어온 키를 넣어주면 됩니다.

 

4. 요청 결과

이제 send를 하면 Current value에 토큰이 들어온 것을 볼 수 있습니다.

 

5. Authorization 설정

사용한 Type을 지정하고 Token은 {{}} 사이에 환경변수에 설정한 변수 이름을 작성합니다.

 

그러면 이제 Header에 자동으로 토큰이 들어가 있습니다!

 

 

🚨 주의사항

Request의 Default 값은 Inherit auth from parent입니다. header에 토큰을 보낼 필요가 없는 요청은 No Auth로 변경해주어야 합니다.

 

결론

이제 토큰을 자동으로 헤더에 넣는 테스트를 성공하였습니다!

 

하지만 제가 작성한 방법은 매 요청마다 DB를 접근해야 합니다. 로그인 한 사용자가 로그아웃 전까지 이용해야할 데이터는 토큰이나 세션에 담아 두는 것이 좋습니다. 필자는 테스트를 위해 한 것으로 이후 변경해 주었습니다.

Comments