This commit is contained in:
@@ -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 없이 나간다)
|
||||||
|
--%>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<script language="javascript">
|
||||||
|
var contextPath = "<%=request.getContextPath()%>";
|
||||||
|
var mainPage = "${mainPage}";
|
||||||
|
var serviceType = localStorage["serviceType"];
|
||||||
|
var mainUrl = contextPath + "/main.do";
|
||||||
|
var params = [];
|
||||||
|
|
||||||
|
if (mainPage) {
|
||||||
|
params.push("mainPage=" + encodeURIComponent(mainPage));
|
||||||
|
}
|
||||||
|
if (serviceType) {
|
||||||
|
params.push("serviceType=" + encodeURIComponent(serviceType));
|
||||||
|
}
|
||||||
|
if (params.length > 0) {
|
||||||
|
mainUrl += "?" + params.join("&");
|
||||||
|
}
|
||||||
|
|
||||||
|
window.location.replace(mainUrl);
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
</html>
|
||||||
@@ -221,9 +221,9 @@ pull 이후 또는 Q-class IDE 오류 시 `./gradlew compileJava` (또는 `clean
|
|||||||
| 운영 | 실제 D'amo 네이티브 라이브러리 |
|
| 운영 | 실제 D'amo 네이티브 라이브러리 |
|
||||||
| 개발 | SHA-256 |
|
| 개발 | SHA-256 |
|
||||||
|
|
||||||
로컬 개발 시 `-Ddamo-manager.enabled=false`
|
`-Ddamo-manager.enabled=false` 으로 설정하면 bypass 한다
|
||||||
|
|
||||||
## DJB (제주은행) 전용 설정
|
## 제주은행 전용 설정
|
||||||
|
|
||||||
DJB 전용 프로퍼티는 DB 테이블 `TSEAIRM24` 에 그룹명 `'Monitoring'` 과
|
DJB 전용 프로퍼티는 DB 테이블 `TSEAIRM24` 에 그룹명 `'Monitoring'` 과
|
||||||
DB 테이블 `PTL_PROPERTY` 에 그룹명 `'Portal'` 로 저장된다.
|
DB 테이블 `PTL_PROPERTY` 에 그룹명 `'Portal'` 로 저장된다.
|
||||||
@@ -320,6 +320,24 @@ DB 테이블 `PTL_PROPERTY` 에 그룹명 `'Portal'` 로 저장된다.
|
|||||||
**토큰발급이력삭제**
|
**토큰발급이력삭제**
|
||||||
- `TOKENISSUANCELOGCLEANUPJOB` - 7일이 지난 토큰 발급내역을 삭제한다
|
- `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.*"
|
./gradlew test --tests "com.eactive.eai.rms.*"
|
||||||
```
|
```
|
||||||
|
|
||||||
## 문서
|
|
||||||
|
|
||||||
- **프로젝트 상세 지침**: `CLAUDE.md` (AI 어시스턴트 및 개발자용 마스터 문서, 한글)
|
|
||||||
- **사용자 가이드**: `WebContent/guide/` (docsify)
|
|
||||||
|
|
||||||
## 라이선스
|
## 라이선스
|
||||||
|
|
||||||
|
|||||||
@@ -125,8 +125,6 @@ public class MainController implements InterceptorSkipController {
|
|||||||
public String loginForm(HttpServletRequest request, Model model) {
|
public String loginForm(HttpServletRequest request, Model model) {
|
||||||
boolean fullScreen = request.getParameter("fullScreen") != null;
|
boolean fullScreen = request.getParameter("fullScreen") != null;
|
||||||
boolean emergencyMode = request.getParameter("emergency") != null;
|
boolean emergencyMode = request.getParameter("emergency") != null;
|
||||||
model.addAttribute("fullScreen", fullScreen);
|
|
||||||
model.addAttribute("emergencyMode", emergencyMode);
|
|
||||||
|
|
||||||
// 세션에 비상모드 저장 (SMS 인증 우회용)
|
// 세션에 비상모드 저장 (SMS 인증 우회용)
|
||||||
HttpSession session = request.getSession();
|
HttpSession session = request.getSession();
|
||||||
@@ -138,6 +136,26 @@ public class MainController implements InterceptorSkipController {
|
|||||||
|
|
||||||
savePendingDeepLink(request, session);
|
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";
|
return "/common/screen/emergency";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user