diff --git a/WebContent/jsp/common/screen/mainRedirect.jsp b/WebContent/jsp/common/screen/mainRedirect.jsp new file mode 100644 index 0000000..9007741 --- /dev/null +++ b/WebContent/jsp/common/screen/mainRedirect.jsp @@ -0,0 +1,33 @@ +<%@ page language="java" contentType="text/html; charset=utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%-- + 이미 로그인된 세션으로 loginForm.do 에 접근한 경우의 bounce 화면. + serviceType은 서버(세션)에 지속 저장되는 값이 아니라 브라우저 localStorage에만 있으므로, + 루트 emergency.jsp와 동일하게 여기서 localStorage를 읽어 main.do URL에 붙여준다. + (없이 넘어가면 이 탭의 sessionStorage.serviceType이 비어 custom.js의 $.ajax 자동주입 값이 + 비게 되어, 새 탭에서 연 화면의 조회 API 호출들이 serviceType 없이 나간다) +--%> + + + + + + diff --git a/readme.md b/readme.md index 370f70b..f800ae2 100644 --- a/readme.md +++ b/readme.md @@ -221,9 +221,9 @@ pull 이후 또는 Q-class IDE 오류 시 `./gradlew compileJava` (또는 `clean | 운영 | 실제 D'amo 네이티브 라이브러리 | | 개발 | SHA-256 | -로컬 개발 시 `-Ddamo-manager.enabled=false` +`-Ddamo-manager.enabled=false` 으로 설정하면 bypass 한다 -## DJB (제주은행) 전용 설정 +## 제주은행 전용 설정 DJB 전용 프로퍼티는 DB 테이블 `TSEAIRM24` 에 그룹명 `'Monitoring'` 과 DB 테이블 `PTL_PROPERTY` 에 그룹명 `'Portal'` 로 저장된다. @@ -320,6 +320,24 @@ DB 테이블 `PTL_PROPERTY` 에 그룹명 `'Portal'` 로 저장된다. **토큰발급이력삭제** - `TOKENISSUANCELOGCLEANUPJOB` - 7일이 지난 토큰 발급내역을 삭제한다 +## IIM 연동 - 제주은행 커스텀 + +**인터페이스** +- 최초 연동시 APIM에 등록되지 않은 경우에만 인터페이스를 생성한다. +- 기본정보(API명, 업무구분, 요청/응답, 당타발)만 등록되며 업데이트는 하지 않는다 +- interface id의 9번째 문자가 `D` 가 아니면 `D`를 추가하여 개발용 인터페이스를 추가로 생성한다 +- (ex : `ASAPICOROEBB082802S2S2` 인 경우, `ASAPICORDOEBB082802S2S2` 를 추가로 생성한다) +- 개발용 인터페이스가 필요없는 경우, APIM에서 개발용 인터페이스를 삭제한다 (차후 개발용 전문 추가 생성 방지) + +**전문레이아웃** +- 연동시 기존의 전문을 삭제하고 등록한다. +- 인터페이스와 동일하게 `D`가 아니면 동일한 레이아웃으로 개발용 전문을 추가로 생성한다 +- (ex : `OPF_ASAPICOROEBB082802S2S2_SRCS` 인 경우, `OPF_ASAPICORDOEBB082802S2S2_SRCS` 를 추가로 생성한다) +- 전문이 등록된 후 API 관리화면에서 필요한 정보를 입력하고 **수정버튼을 클릭하여 G/W에 반영된다** + +**연동이력** +- 연동 이력은 `환경정보 > EMS관리 > 연동 배포 이력` 메뉴에서 조회한다. + ## 배포 | 대상 | 비고 | @@ -358,10 +376,6 @@ IntelliJ 전용 변형은 `build.gradle.intellij` 로 별도 관리합니다 ( ./gradlew test --tests "com.eactive.eai.rms.*" ``` -## 문서 - -- **프로젝트 상세 지침**: `CLAUDE.md` (AI 어시스턴트 및 개발자용 마스터 문서, 한글) -- **사용자 가이드**: `WebContent/guide/` (docsify) ## 라이선스 diff --git a/src/main/java/com/eactive/eai/rms/common/login/MainController.java b/src/main/java/com/eactive/eai/rms/common/login/MainController.java index 83bd372..d24f0f1 100644 --- a/src/main/java/com/eactive/eai/rms/common/login/MainController.java +++ b/src/main/java/com/eactive/eai/rms/common/login/MainController.java @@ -125,8 +125,6 @@ public class MainController implements InterceptorSkipController { public String loginForm(HttpServletRequest request, Model model) { boolean fullScreen = request.getParameter("fullScreen") != null; boolean emergencyMode = request.getParameter("emergency") != null; - model.addAttribute("fullScreen", fullScreen); - model.addAttribute("emergencyMode", emergencyMode); // 세션에 비상모드 저장 (SMS 인증 우회용) HttpSession session = request.getSession(); @@ -138,6 +136,26 @@ public class MainController implements InterceptorSkipController { savePendingDeepLink(request, session); + // 이미 로그인된 세션이면 로그인 화면을 다시 보여주지 않고, 정상 로그인 성공시와 동일한 화면으로 바로 이동한다. + // (fullScreen/emergencyMode는 로그인 화면 전용 model 속성이라 여기서는 채우지 않는다 - RedirectView가 + // model의 단순타입 속성을 리다이렉트 URL 쿼리파라미터로 자동 노출(exposeModelAttributes=true)하기 때문에, + // 미리 채워두면 main.do?fullScreen=false&emergencyMode=false 처럼 의도치 않은 파라미터가 붙는다) + // + // serviceType은 서버에 지속 저장되지 않고 브라우저 localStorage에만 있으므로 서버에서 바로 + // redirect:/main.do 로 보내면 이 값이 빠진다 - 이 탭의 sessionStorage.serviceType이 비어 + // custom.js의 $.ajax 자동주입(serviceType)도 비게 되어, 이후 이 탭에서 여는 화면의 조회 + // API 호출들이 serviceType 없이 나간다. 루트 emergency.jsp와 동일하게 mainRedirect.jsp에서 + // localStorage를 읽어 main.do URL에 붙이도록 우회한다. + boolean isDualLogin = monitoringContext.getBooleanProperty(MonitoringContext.RMS_DUAL_LOGIN_ENABLED, true); + if (SessionManager.isValidSession(request, isDualLogin)) { + String deepLinkMainPage = consumePendingDeepLinkMainPage(request, session); + model.addAttribute("mainPage", deepLinkMainPage == null ? "" : deepLinkMainPage); + return "/common/screen/mainRedirect"; + } + + model.addAttribute("fullScreen", fullScreen); + model.addAttribute("emergencyMode", emergencyMode); + return "/common/screen/emergency"; }