
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
package com.takensoft.common.service;
import com.takensoft.cms.mber.vo.MberVO;
import com.takensoft.common.exception.CustomAccessDeniedException;
import lombok.RequiredArgsConstructor;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;
/**
* @author takensoft
* @since 2025.01.22
* @modification
* since | author | description
* 2025.01.22 | takensoft | 최초 등록
*
* 사용자 검증 서비스
*/
@Service("authorizationService")
@RequiredArgsConstructor
public class VerificationService {
/**
* @return 현재 인증된 사용자 정보
* @throws CustomAccessDeniedException 인증되지 않은 경우 예외 발생
*
* 현재 로그인된 사용자를 가져오는 공통 메서드
*/
private MberVO getAuthenticatedUser() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if(authentication == null || !authentication.isAuthenticated()) {
throw new CustomAccessDeniedException("접근 권한이 없습니다.");
}
Object principal = authentication.getPrincipal();
if(!(principal instanceof MberVO)) {
throw new CustomAccessDeniedException("접근 권한이 없습니다.");
}
return (MberVO) principal;
}
/**
* @param targetUserId 접근하려는 사용자 ID
* @throws CustomAccessDeniedException - 접근 권한이 없을 경우 예외 발생
*
* 특정 사용자 ID에 대한 접근 권한 검증
*/
public void verifyAccess(String targetUserId) {
MberVO user = getAuthenticatedUser();
// 관리자 권한 여부
boolean isAdmin = user.getAuthorList().stream()
.anyMatch(auth -> "ROLE_ADMIN".equals(auth.getAuthrtCd()));
// 본인 여부
boolean isOwner = user.getMbrId().equals(targetUserId);
if(!isAdmin && !isOwner) {
throw new CustomAccessDeniedException("접근 권한이 없습니다.");
}
}
/**
* @return 관리자 여부(true, false)
*
* 관리자 여부 검증
*/
public boolean verifyAdmin() {
MberVO user = getAuthenticatedUser();
// 관리자 권한 여부 반환
return user.getAuthorList().stream()
.anyMatch(auth -> "ROLE_ADMIN".equals(auth.getAuthrtCd()));
}
/**
* @return 현재 로그인된 사용자 ID
*
* 로그인된 사용자 아이디 반환
* - 등록자, 수정자 입력 시 사용
*/
public String getCurrentUserId() {
String userId = null;
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
// 디버깅용 로그 추가
System.out.println("Authentication: " + authentication);
if(authentication != null) {
System.out.println("Is Authenticated: " + authentication.isAuthenticated());
System.out.println("Principal Type: " + authentication.getPrincipal().getClass().getName());
System.out.println("Principal: " + authentication.getPrincipal());
}
if(authentication != null && authentication.isAuthenticated()) {
Object principal = authentication.getPrincipal();
if(principal instanceof MberVO) {
userId = ((MberVO) authentication.getPrincipal()).getMbrId();
}
}
return userId;
}
}