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 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;
|
@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) {
|
return jwtHandler.getMemberIdFromToken(token)
|
||||||
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));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user