generated from pricelees/issue-pr-template
refactor: CookieUtils를 활용한 MemberIdResolver 코틀린 전환
This commit is contained in:
parent
4635699e46
commit
8371559978
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user