< 글의 목적 : MSA Architecture 를 공부하던 중, 회원 로그인에 대한 기능 구현 처리 방법을 정리해보고자 글을 작성한다. 모든 과정에 대한 글을 쓰기보다 중요한 포인트 혹은 쉽게 놓칠 수 있는 부분들에 대해 정리해보고자 한다 - 해당글의 대한 출처는 인프런 강의 "Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)" 를 참고해주세요 >
< 참고 : WebSecurity 는 HttpSecurity 상위에 있는데, 따라서 동작은 WebSecurity 가 먼저 동작한다. 하지만, 우리는 현재 여기서 http 에 대해 조건을 걸어주고 있고, 그 이유는 WebSecurity 는 아래와 같이 사용을 하는데, Spring Security Filter Chain 를 거치지 않아 인증, 인가 서비스가 필요 없는 endpoint 에 쓰인다. httpSecurity 는 인증, 인가 서비스를 거치고 antMatchers 에 있는 엔드포인트는 '인증'을 무시한다. >
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/health", "/health/**");
}
-> 기존에 /users/ 에 대한 엔드포인트로 시작하는 모든 api 를 허용했다면, IP 를 한정하고, .addFilter 를 통해 조건을 추가하는 과정이다.
-> override 는 이전에 구현이 잘 되어있는 메소드를 다시 쓰는 것이고, implement 는 구현이 안되어 있는 메소드를 구현하는 것이다.
-> 위 사진은 yml file 에서 msa 구조로 구성되어 있는 user microservice 를 라우팅해주는 부분이다. 기존이랑 다른 점은 RewritePath 를 적어줌으로써 굳이 /user-service 를 앞에 모두 적어주지 않아도 라우팅 되게끔 설정했다.
-> (참고) : 아래 사진과 같이 spring cloud gateway 를 통해 각 micro services 프로젝트들을 따로 분리하고, yml file routes 를 통해 id 별로 서버를 분리했다.
// JWT
implementation 'io.jsonwebtoken:jjwt-api:0.11.5'
implementation 'io.jsonwebtoken:jjwt-impl:0.11.5'
implementation 'io.jsonwebtoken:jjwt-jackson:0.11.5'
-> build.gradle 에 jwt 에 대한 의존성 추가 + yml file 에 만료시간 도 추가 (멀티모듈 구조일 경우 해당 모듈의 gradle file 에 의존성 추가)
public String createToken(TokenPayload payload) {
Date now = new Date();
Date validity = new Date(now.getTime() + validityInMilliseconds);
return Jwts.builder()
.addClaims(payload.toMap())
.setIssuedAt(now)
.setExpiration(validity)
.signWith(key, SignatureAlgorithm.HS256)
.compact();
}
-> jwt 생성 코드
-> 후에 설정 정보를 담고 있는 application.yml file 을 외부 시스템에서 관리하기 위한 방법으로 사용해보고 블로그로 또 정리해볼 예정이다.
< 장점 > : 각 서비스를 다시 빌드하지 않고, 바로 적용 가능
(참고 : 이해를 돕기 위한 사진이고, 해당 사진의 출처는 위와 같이 인프런 강의 "Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)" 에 있습니다.^^)
실패는 없다. 성공을 위한 하나의 과정일 뿐이다. - ajh