728x90
JWT.IO
JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.
jwt.io
Gateway AuthorizationHeaderFilter 추가
-
@Component @Slf4j @RequiredArgsConstructor public class AuthorizationHeaderFilter extends AbstractGatewayFilterFactory<AuthorizationHeaderFilter.Config> { private final Environment env; //login -> token -> users(with token) -> header(include token) @Override public GatewayFilter apply(Config config) { //토큰이 잘 발행이 되었는지를 판단하는 필터 return ((exchange, chain) -> { ServerHttpRequest request = exchange.getRequest(); if (!request.getHeaders().containsKey(AUTHORIZATION)) { return onError(exchange, "no authorization header", UNAUTHORIZED); //적절한 헤더가 없을 경우 } String authorizationHeader = request.getHeaders().get(AUTHORIZATION) .get(0); //토큰을 가지고 온다 String jwt = authorizationHeader.replace("Bearer", ""); if (!isJwtValid(jwt)) { return onError(exchange, "JWT token is not valid", UNAUTHORIZED); } return chain.filter(exchange); }); } private boolean isJwtValid(String jwt) { boolean returnValue = true; String subject = null; try { subject = Jwts.parser().setSigningKey(env.getProperty("token.secret")) .parseClaimsJws(jwt).getBody() .getSubject(); } catch (Exception ex) { returnValue = false; } if (subject == null || subject.isEmpty()) { returnValue = false; } return returnValue; } //Mono, Flux 는 Spring WebFlux 에서 새로 나온 개념으로 반환되는 타입 개념으로 생각하면 된다(비동기 방식 반환) private Mono<Void> onError(ServerWebExchange exchange, String error, HttpStatus httpStatus) { ServerHttpResponse response = exchange.getResponse(); response.setStatusCode(httpStatus); log.error(error); return response.setComplete(); } public static class Config { } } - apply 메소드에서 토큰이 잘 발행이 되었는지를 판단하여 준다.
- 만약 header에 Authrorization이 포함되어있지 않을 경우 onError 발생
- 만약 Authrorization header에 Baarer를 제외한 값(토큰)이 실제 발행이 된 토큰인지 확인해서 발행이 된 토큰이면 성공
- 발행된 토큰인지를 확인하기위해 isJwtValid 함수를 호출하게 되는데 이때, application.yml에 있는 token.secret값을 이용하여 복호화한다.
Application.yml


TEST

실행도중 에러가 발생할 수 있는데 Pom에 해당 의존성을 추가하면 사라진다

728x90
'Spring Cloud로 개발하는 MSA > UserMicroservice(2)' 카테고리의 다른 글
| ch04. Users Microservice - 로그인 성공 처리 (0) | 2022.02.02 |
|---|---|
| ch03. Users Microservice - Routes 정보 변경 (0) | 2022.02.02 |
| ch02. Users Microservice - loadUserByUsername() 구현 (0) | 2022.02.02 |
| ch01. Users Microservice - AuthenticationFilter 추가 (0) | 2022.02.02 |