개발자로 후회없는 삶 살기
spring PART.postman으로 login 테스트 할 때 받아온 토큰을 요청 헤더에 자동으로 넣는 방법 본문
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를 접근해야 합니다. 로그인 한 사용자가 로그아웃 전까지 이용해야할 데이터는 토큰이나 세션에 담아 두는 것이 좋습니다. 필자는 테스트를 위해 한 것으로 이후 변경해 주었습니다.
'[백엔드] > [spring+JPA | 이슈해결]' 카테고리의 다른 글
[최적화] Spring 환경 AI 서비스 실시간 스트림 파이프라인 구축 (with Redis Stream) (0) | 2024.11.11 |
---|---|
자바 PART.무한의 값 처리 BigDecimal (0) | 2023.11.27 |
spring PART.Value Object와 Custom Validator를 이용한 검증 개선 (0) | 2023.07.21 |
[Java] Java의 immutable (0) | 2023.07.07 |
(작성중) spring PART.로컬 호스트에서 spring 서버와 flask 서버 통신하기 (0) | 2023.06.16 |