인증 관련 PTL_PROPERTY 및 로그인 차단 로직 추가:
- 개발/테스트 환경 인증번호 노출 설정 AuthNoticeProperties 추가 - 삭제된 법인 소속 사용자 로그인 차단 처리 로직 반영
This commit is contained in:
@@ -0,0 +1,43 @@
|
|||||||
|
package com.eactive.apim.portal.apps.auth;
|
||||||
|
|
||||||
|
import com.eactive.apim.portal.portalproperty.service.PortalPropertyService;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.core.env.Environment;
|
||||||
|
import org.springframework.core.env.Profiles;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 인증(이메일/SMS) 테스트 안내 관련 PTL_PROPERTY 접근 래퍼.
|
||||||
|
*
|
||||||
|
* <p>그룹 {@code Portal}, 키 {@code auth.test-notice.enabled}(true/false). 값이 참이면 인증 요청
|
||||||
|
* 응답에 인증번호를 실어 화면에 노출한다(실제 발송 대신 테스트 확인 용도). 기존 application.yml
|
||||||
|
* {@code portal.test-auth-notice-enabled} 설정을 DB PTL_PROPERTY 로 이전한 것으로,
|
||||||
|
* {@link TwoFactorProperties} 와 동일한 {@code getOrCreateProperty} 패턴을 따른다.</p>
|
||||||
|
*
|
||||||
|
* <p><b>prod 프로파일에서는 DB 값과 무관하게 항상 false</b> 를 반환한다(운영 환경 인증번호 노출 금지).
|
||||||
|
* 세션 keepalive 등 다른 비운영 전용 스위치와 동일한 정책이다.</p>
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class AuthNoticeProperties {
|
||||||
|
|
||||||
|
public static final String GROUP = "Portal";
|
||||||
|
public static final String KEY_TEST_NOTICE_ENABLED = "auth.test-notice.enabled";
|
||||||
|
|
||||||
|
private final PortalPropertyService portalPropertyService;
|
||||||
|
private final Environment environment;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 인증 요청 응답에 인증번호를 실어 UI 에 노출할지 여부(개발/테스트 전용).
|
||||||
|
* prod 환경에서는 property 값과 무관하게 항상 false.
|
||||||
|
*/
|
||||||
|
public boolean isTestNoticeEnabled() {
|
||||||
|
if (environment.acceptsProfiles(Profiles.of("prod"))) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
String value = portalPropertyService.getOrCreateProperty(
|
||||||
|
GROUP, KEY_TEST_NOTICE_ENABLED, "true",
|
||||||
|
"인증(이메일/SMS) 요청 시 인증번호를 화면에 표시할지 여부 (true/false, 테스트 전용)");
|
||||||
|
return value != null && "true".equalsIgnoreCase(value.trim());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -79,6 +79,12 @@ public class PortalAuthenticationManager implements AuthenticationManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (user.getPortalOrg() != null) {
|
if (user.getPortalOrg() != null) {
|
||||||
|
// 삭제(탈퇴)된 법인 소속 사용자는 2FA 이전에 로그인 차단
|
||||||
|
if (PortalOrgEnums.OrgStatus.REMOVED.equals(user.getPortalOrg().getOrgStatus())) {
|
||||||
|
log.debug("삭제된 법인 소속 로그인 차단 - user : {} / org.orgStatus : {}", user.getUsername(), user.getPortalOrg().getOrgStatus());
|
||||||
|
throw new DisabledException("삭제된 법인의 계정입니다. 로그인할 수 없습니다.");
|
||||||
|
}
|
||||||
|
|
||||||
if (!user.getPortalOrg().getApprovalStatus().equals(PortalOrgEnums.ApprovalStatus.COMPLETED)) {
|
if (!user.getPortalOrg().getApprovalStatus().equals(PortalOrgEnums.ApprovalStatus.COMPLETED)) {
|
||||||
log.debug("기업사용자 - getApprovalStatus : {} / - org.approvalStatus : {}", user.getApprovalStatus(), user.getPortalOrg().getApprovalStatus());
|
log.debug("기업사용자 - getApprovalStatus : {} / - org.approvalStatus : {}", user.getApprovalStatus(), user.getPortalOrg().getApprovalStatus());
|
||||||
throw new DisabledException("로그인할 수 없습니다. 관리자에게 문의하세요. (법인 승인대기중)");
|
throw new DisabledException("로그인할 수 없습니다. 관리자에게 문의하세요. (법인 승인대기중)");
|
||||||
|
|||||||
Reference in New Issue
Block a user