refactor: CookieUtils를 활용한 MemberIdResolver 코틀린 전환

This commit is contained in:
이상진 2025-07-13 20:35:31 +09:00
parent 4635699e46
commit 8371559978

View File

@ -1,52 +1,33 @@
package roomescape.system.auth.web.support; package roomescape.system.auth.web.support
import java.util.Arrays; import jakarta.servlet.http.HttpServletRequest
import org.springframework.core.MethodParameter
import org.springframework.core.MethodParameter; import org.springframework.stereotype.Component
import org.springframework.http.HttpStatus; import org.springframework.web.bind.support.WebDataBinderFactory
import org.springframework.stereotype.Component; import org.springframework.web.context.request.NativeWebRequest
import org.springframework.web.bind.support.WebDataBinderFactory; import org.springframework.web.method.support.HandlerMethodArgumentResolver
import org.springframework.web.context.request.NativeWebRequest; import org.springframework.web.method.support.ModelAndViewContainer
import org.springframework.web.method.support.HandlerMethodArgumentResolver; import roomescape.system.auth.infrastructure.jwt.JwtHandler
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;
@Component @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;
public MemberIdResolver(JwtHandler jwtHandler) {
this.jwtHandler = jwtHandler;
} }
@Override @Throws(Exception::class)
public boolean supportsParameter(MethodParameter parameter) { override fun resolveArgument(
return parameter.hasParameterAnnotation(MemberId.class); parameter: MethodParameter,
} mavContainer: ModelAndViewContainer?,
webRequest: NativeWebRequest,
binderFactory: WebDataBinderFactory?
): Any {
val request: HttpServletRequest = webRequest.nativeRequest as HttpServletRequest
val token: String = request.accessTokenCookie().value
@Override return jwtHandler.getMemberIdFromToken(token)
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));
} }
} }