Spring/MSA

[스프링 MSA] MSA_S6 : User Microservice ②

ajeong7038 2023. 11. 29. 20:02

`Spring Cloud로 개발하는 마이크로서비스 애플리케이션 (MSA)` 강의를 듣고 정리한 자료입니다

 

✨ UsernamePasswordAuthenticationFilter

- 강의에서는 두 가지 메소드 오버라이딩

1. attemptAuthentication

- 사용자의 요청 정보가 `RequestLogin`이라는 클래스로 들어온다

- Post 형태로 전달되는 것은 Request 파라미터로 받을 수 없기 때문에 inputStream으로 처리해주면 수작업으로도 데이터 처리가 가능하다

- `new UsernamePasswordAuthenticationToken()` : 이메일과 패스워드를 가지고

2. successfulAuthentication


✨ getAuthenticationManager

- 인증 처리 담당 매니저

- 사용자가 입력했던 값을 username, password, authentication, token으로 바꿔서 getAuthenticationManager에 넘기면 id와 패스워드를 알아서 비교해준다


✨ configure (두 가지 오버라이딩)

1. `HttpSecurity http` 파라미터 : 권한 관련 부분

2. `AuthenticationManagerBuilder auth) 파라미터 : 인증 관련 부분

auth.userDetailsService()

 

- 사용자가 전달했던 UserName과 Password 두 개를 가지고 로그인 처리를 해준다


✨ Users Microservice - Routes 정보 변경

RewritePath=/user-service/(?<segment>.*), /$\{segment}

 

- userservice/(?<segment>.*로 정보가 들어오면 `/$\{segment}로 바꿔주겠다는 의미

- 라우트 정보 등록 시 predicate에 URI 직접 명시

    -> 특정 데이터 하나에 대해서만 조건 추가 가능

- login 엔드포인트를 구현해놓지 않았더라도 시큐리티 기능을 사용하면 알아서 사용이 가능하도록 해준다

Break Point

- 디버깅 모드에서 브레이크 포인트를 걸어두게 되면 화면을 잠깐 멈추고 디버그 모드로 이동한다


✨ JWT

토큰 생성

//JWT 토큰 생성
String token = Jwts.builder()
        .setSubject(userDetails.getUserId())
        .setExpiration(new Date(System.currentTimeMillis() +
                Long.parseLong(env.getProperty("token.expiration_time"))))
        .signWith(SignatureAlgorithm.ES512, env.getProperty("token.secret"))
        .compact();

 

장점

- 클라이언트 독립적인 서비스 (stateless)

- CDN

- No Cookie-Session (No CSRF, 사이트간 요청 위조)

- 지속적인 토큰 저장

- 클라이언트 요청이 들어왔을 경우 반환시켜주는 데이터 타입으로 Mono, Flux가 있다

- 데이터를 처리할 때 비동기 방식으로 처리하기 때문!