application.yml의 excludePath 설정을 changePathToListMap 메서드에서 Map으로 분리한 뒤 List로 저장합니다
ex) excludePath 설정은 excludePath: POST /member; POST /member/login; 또는
excludePath: POST /auth/**; PATCH /reAuth/**; 와 같이 되어있습니다
...
private String excludePath;
private List<Map<String, String>> excludePathList;
public void setExcludePath(String excludePath) {
this.excludePath = excludePath;
// 1. application.yml에 설정한 excludePath을 Map으로 분리하여 List로 저장
excludePathList = GateWayUtils.changePathToListMap(excludePath);
}
게이트웨이 서버 구현 내용
아래와 같은 순서로 진행됩니다.
ps. Spring Security를 사용하는 방법도 있지만 직접 Filter를 커스텀 하여 Security와 비슷하게 동작하는 인가 방식을 구현해봤습니다
application.yml 구조 설명
실제 구현되어있는 application.yml을 예시로 작성하였습니다
Filter 종류 및 역할
Default Filter
Default Filter인 JwtGlobalFilter는 아래와 같이 구현하였습니다
토큰 검증 및 추출이 이뤄지는 extractMemberId 메서드는 아래와 같이 구현하였습니다
Subject(MemberId)를 저장하는 addHeader 메서드는 아래와 같이 구현하였습니다
Service Filter
Service Filter중 하나인 MemberFilter는 아래와 같이 구현하였습니다
토큰 정보가 필요한 URL인지 확인하는 isExcludePath 메서드는 아래와 같이 구현하였습니다
Request URL에 Subject(MemberId) 가 포함되어있는지 확인하는 isExistMemberIdInPath 메서드는 아래와 같이 구현하였습니다
excludePath (토큰 정보가 필요없는 URL 모음)
각 서비스별 설정된 excludePath는 아래와 같이 구현하였습니다
excludePath: POST /member; POST /member/login;
또는excludePath: POST /auth/**; PATCH /reAuth/**;
와 같이 되어있습니다changePathToListMap 메서드는 아래와 같이 구현하였습니다
path를 정규식으로 변환하는 changePathToRegEx는 아래와 같이 구현하였습니다