diff --git a/src/main/java/backend/likelion/todos/auth/AuthArgumentResolver.java b/src/main/java/backend/likelion/todos/auth/AuthArgumentResolver.java index 9be1b25..a187dd1 100644 --- a/src/main/java/backend/likelion/todos/auth/AuthArgumentResolver.java +++ b/src/main/java/backend/likelion/todos/auth/AuthArgumentResolver.java @@ -20,7 +20,9 @@ public class AuthArgumentResolver implements HandlerMethodArgumentResolver { @Override public boolean supportsParameter(MethodParameter parameter) { // TODO [6단계] parameter가 @Auth 어노테이션을 갖고 있고, 파라미터 타입이 Long.class인 경우 true를 반환하는 조건을 구현하세요. - return false; + boolean b = parameter.hasParameterAnnotation(Auth.class); + boolean equals = parameter.getParameterType().equals(Long.class); + return b && equals; } @Override @@ -31,12 +33,17 @@ public Object resolveArgument( WebDataBinderFactory binderFactory ) { // TODO [6단계] webRequest로부터 accessToken을 추출하고, jwtService를 사용하여 memberId를 추출하여 반환하는 로직을 구현하세요. - return null; + String accessToken = extractAccessToken(webRequest); + return jwtService.extractMemberId(accessToken); } private static String extractAccessToken(NativeWebRequest request) { // TODO [6단계] request 헤더에서 "Authorization" 헤더 값을 추출하여 "Bearer "로 시작하는 accessToken을 반환하세요. 유효하지 않을 경우 "로그인 후 접근할 수 있습니다." 메시지와 함께 UnAuthorizedException을 발생시키는 로직을 구현하세요. - return null; - } + String bearerToken = request.getHeader("Authorization"); + if (StringUtils.hasText(bearerToken) && bearerToken.startsWith("Bearer")) { + return bearerToken.substring(7); + } + throw new UnAuthorizedException("로그인 후 접근할 수 있습니다."); + } }