diff --git a/src/main/java/roomescape/system/auth/web/support/MemberIdResolver.kt b/src/main/java/roomescape/system/auth/web/support/MemberIdResolver.kt index 987b0985..a22d5fc5 100644 --- a/src/main/java/roomescape/system/auth/web/support/MemberIdResolver.kt +++ b/src/main/java/roomescape/system/auth/web/support/MemberIdResolver.kt @@ -1,52 +1,33 @@ -package roomescape.system.auth.web.support; +package roomescape.system.auth.web.support -import java.util.Arrays; - -import org.springframework.core.MethodParameter; -import org.springframework.http.HttpStatus; -import org.springframework.stereotype.Component; -import org.springframework.web.bind.support.WebDataBinderFactory; -import org.springframework.web.context.request.NativeWebRequest; -import org.springframework.web.method.support.HandlerMethodArgumentResolver; -import org.springframework.web.method.support.ModelAndViewContainer; - -import jakarta.servlet.http.Cookie; -import jakarta.servlet.http.HttpServletRequest; -import roomescape.system.auth.infrastructure.jwt.JwtHandler; -import roomescape.system.exception.ErrorType; -import roomescape.system.exception.RoomEscapeException; +import jakarta.servlet.http.HttpServletRequest +import org.springframework.core.MethodParameter +import org.springframework.stereotype.Component +import org.springframework.web.bind.support.WebDataBinderFactory +import org.springframework.web.context.request.NativeWebRequest +import org.springframework.web.method.support.HandlerMethodArgumentResolver +import org.springframework.web.method.support.ModelAndViewContainer +import roomescape.system.auth.infrastructure.jwt.JwtHandler @Component -public class MemberIdResolver implements HandlerMethodArgumentResolver { +class MemberIdResolver( + private val jwtHandler: JwtHandler +) : HandlerMethodArgumentResolver { - private static final String ACCESS_TOKEN_COOKIE_NAME = "accessToken"; + override fun supportsParameter(parameter: MethodParameter): Boolean { + return parameter.hasParameterAnnotation(MemberId::class.java) + } - private final JwtHandler jwtHandler; + @Throws(Exception::class) + override fun resolveArgument( + parameter: MethodParameter, + mavContainer: ModelAndViewContainer?, + webRequest: NativeWebRequest, + binderFactory: WebDataBinderFactory? + ): Any { + val request: HttpServletRequest = webRequest.nativeRequest as HttpServletRequest + val token: String = request.accessTokenCookie().value - public MemberIdResolver(JwtHandler jwtHandler) { - this.jwtHandler = jwtHandler; - } - - @Override - public boolean supportsParameter(MethodParameter parameter) { - return parameter.hasParameterAnnotation(MemberId.class); - } - - @Override - public Object resolveArgument( - MethodParameter parameter, - ModelAndViewContainer mavContainer, - NativeWebRequest webRequest, - WebDataBinderFactory binderFactory - ) throws Exception { - Cookie[] cookies = webRequest.getNativeRequest(HttpServletRequest.class).getCookies(); - if (cookies == null) { - throw new RoomEscapeException(ErrorType.NOT_EXIST_COOKIE, HttpStatus.UNAUTHORIZED); - } - return Arrays.stream(cookies) - .filter(cookie -> cookie.getName().equals(ACCESS_TOKEN_COOKIE_NAME)) - .findAny() - .map(cookie -> jwtHandler.getMemberIdFromToken(cookie.getValue())) - .orElseThrow(() -> new RoomEscapeException(ErrorType.INVALID_TOKEN, HttpStatus.UNAUTHORIZED)); - } + return jwtHandler.getMemberIdFromToken(token) + } }