로그인한 유저와 토큰을 보낸 유저는 항상 같을까?
현직에서 일해본적도 없고, 제 머릿속에서 나오는게 대부분이라 어쩌면 과할수도 있지 않을까? 하는 생각을 합니다. 하지만, 현재 로그인한 유저와 요청 헤더안에 있는 토큰이 말하는 유저가 같은지 검증을 해야할 것 같았습니다. (돌다리도 두드려 보고 건너랬다고…)
그래서 맨 아래에 이 둘이 같은지 검증하는 메서드를 추가하였습니다.
@Component
@RequiredArgsConstructor
public class AuthUtil {
private final TokenUtil tokenUtil;
private final UserRepository userRepository;
public Long getLoginUserIndex() {
User user = getLoginUser();
Long userId = user.getId();
return userId;
}
public User getLoginUser() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
Object principal = authentication.getPrincipal();
return (User) principal;
}
public void isLoggedInUserSameCurrentUser (HttpServletRequest request) {
Long isLoggedInUserId = getLoginUserIndex();
String accessToken = tokenUtil.getJWTTokenFromHeader(request);
Long currentUserId = Long.valueOf(tokenUtil.getUserIdFromToken(accessToken));
if (!isLoggedInUserId.equals(currentUserId)) {
throw new ApiException(ErrorType.USER_NOT_AUTHORIZED);
}
}
}
Java
복사