diff --git a/WebContent/jsp/onl/admin/authserver/scopeManDetail.jsp b/WebContent/jsp/onl/admin/authserver/scopeManDetail.jsp index 8a78458..505483e 100644 --- a/WebContent/jsp/onl/admin/authserver/scopeManDetail.jsp +++ b/WebContent/jsp/onl/admin/authserver/scopeManDetail.jsp @@ -151,6 +151,10 @@ function saveApiGridData(scopeId, returnUrl) { type : "POST", url:mapping_url, data: postData, + beforeSend: function() { + $("[id^='btn_']").prop("disabled", true); + $("#btn_modify").text("처리중 . . . . ."); + }, success:function(args){ alert("저장 되었습니다."); @@ -158,7 +162,11 @@ function saveApiGridData(scopeId, returnUrl) { }, error:function(e){ alert(e.responseText); - } + }, + complete: function() { + $("[id^='btn_']").prop("disabled", false); + $("#btn_modify").text("수정"); + } }); } @@ -187,7 +195,11 @@ $(document).ready(function() { success:function(args){ alert("SCOPE 정보가 저장 되었습니다. 이어서 API 리스트를 저장합니다."); + if(!isDetail) { // INSERT 일 경우 ScopeId를 업데이트 + key = $('input[name=scopeId]').val(); + } saveApiGridData(key, returnUrl); // API LIST 저장. + }, error:function(e){ diff --git a/WebContent/jsp/onl/admin/rule/transform2/transform2ManDetail.jsp b/WebContent/jsp/onl/admin/rule/transform2/transform2ManDetail.jsp index aa0d607..8ee79f9 100644 --- a/WebContent/jsp/onl/admin/rule/transform2/transform2ManDetail.jsp +++ b/WebContent/jsp/onl/admin/rule/transform2/transform2ManDetail.jsp @@ -717,6 +717,8 @@ reloadSourceTargetGrid('${param.cnvsnName}'); reloadCnvsnDesc(); + + setSearchable("functionCombo"); }, error:function(e){ alert(e.responseText); diff --git a/WebContent/jsp/onl/apim/apigroup/apiGroupManPopup.jsp b/WebContent/jsp/onl/apim/apigroup/apiGroupManPopup.jsp index 0654ec0..f5f6d14 100644 --- a/WebContent/jsp/onl/apim/apigroup/apiGroupManPopup.jsp +++ b/WebContent/jsp/onl/apim/apigroup/apiGroupManPopup.jsp @@ -236,10 +236,16 @@ + + API 명 + API FULL PATH + + + diff --git a/WebContent/jsp/onl/transaction/apim/apiInterfaceManDetail.jsp b/WebContent/jsp/onl/transaction/apim/apiInterfaceManDetail.jsp index df04283..6b53621 100644 --- a/WebContent/jsp/onl/transaction/apim/apiInterfaceManDetail.jsp +++ b/WebContent/jsp/onl/transaction/apim/apiInterfaceManDetail.jsp @@ -2084,7 +2084,7 @@ -loneInterfaceButton">복제 + diff --git a/src/main/java/com/eactive/eai/rms/common/login/SessionDestructionListener.java b/src/main/java/com/eactive/eai/rms/common/login/SessionDestructionListener.java new file mode 100644 index 0000000..1fb4d46 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/common/login/SessionDestructionListener.java @@ -0,0 +1,46 @@ +package com.eactive.eai.rms.common.login; + +import javax.servlet.annotation.WebListener; +import javax.servlet.http.HttpSession; +import javax.servlet.http.HttpSessionEvent; +import javax.servlet.http.HttpSessionListener; + +import org.apache.log4j.Logger; + +@WebListener +public class SessionDestructionListener implements HttpSessionListener { + + private static final Logger logger = Logger.getLogger(SessionDestructionListener.class); + + @Override + public void sessionCreated(HttpSessionEvent se) { + + } + + /** + * 세션 타임아웃 등으로 소멸 시 세션정보 삭제 + */ + @Override + public void sessionDestroyed(HttpSessionEvent se) { + + try { + HttpSession session = se.getSession(); + + String userId = (String) session.getAttribute("userId"); + + // 로그인 한 사용자의 세션정보 정리 + if (userId != null) { + if (logger.isDebugEnabled()) { + logger.debug("[SessionListener] 세션만료 감지. 사용자 제거: " + userId); + } + + SessionManager.removeUserSession(userId); + } + + } catch (Exception e) { + + + logger.error("[SessionListener] 세션 정리 중 오류 발생", e); + } + } +} diff --git a/src/main/java/com/eactive/eai/rms/data/entity/onl/authserver/ScopeEntityService.java b/src/main/java/com/eactive/eai/rms/data/entity/onl/authserver/ScopeEntityService.java index 2f42d64..89b2a1e 100644 --- a/src/main/java/com/eactive/eai/rms/data/entity/onl/authserver/ScopeEntityService.java +++ b/src/main/java/com/eactive/eai/rms/data/entity/onl/authserver/ScopeEntityService.java @@ -1,21 +1,31 @@ package com.eactive.eai.rms.data.entity.onl.authserver; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; import com.eactive.eai.data.entity.onl.authserver.QScopeEntity; import com.eactive.eai.data.entity.onl.authserver.ScopeEntity; import com.eactive.eai.data.entity.onl.authserver.ScopeEntityId; import com.eactive.eai.data.jpa.AbstractDataService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + @Service @Transactional public class ScopeEntityService extends AbstractDataService { - + + @PersistenceContext + private EntityManager entityManager; // AbstractDataService 의 entityManager가 private이라 접근 불가하여 별도 주입 + public void deleteByIdScopeId(String scopeId) { getJPAQueryFactory().delete(QScopeEntity.scopeEntity) .where(QScopeEntity.scopeEntity.id.scopeid.eq(scopeId)) .execute(); + + // 동일 트랜잭션 내에서 같은 ID로 재저장 시 충돌(EntityExistsException)을 방지 + entityManager.flush(); + entityManager.clear(); } } diff --git a/src/main/java/com/eactive/eai/rms/data/entity/onl/eaimsg/EAIMessageService.java b/src/main/java/com/eactive/eai/rms/data/entity/onl/eaimsg/EAIMessageService.java index 4bf2428..2aeb0e3 100644 --- a/src/main/java/com/eactive/eai/rms/data/entity/onl/eaimsg/EAIMessageService.java +++ b/src/main/java/com/eactive/eai/rms/data/entity/onl/eaimsg/EAIMessageService.java @@ -310,8 +310,6 @@ public class EAIMessageService extends AbstractDataService(result, pageable, result.size()); @@ -320,7 +318,7 @@ public class EAIMessageService extends AbstractDataService insert(HttpServletRequest request, HttpServletResponse response, InflowGroupControlManUI ui, @RequestParam(value = "interfaceListJson", required = false) String interfaceListJson) throws Exception { parseInterfaceList(ui, interfaceListJson); String modifiedBy = getSessionUserId(request); @@ -88,14 +88,14 @@ public class InflowGroupControlManController extends OnlBaseAnnotationController CommonCommand command = new CommonCommand("com.eactive.eai.agent.inflow.ReloadInflowGroupControlCommand", ui.getGroupId()); agentUtilService.broadcast(command); - return null; + return ResponseEntity.ok().build(); } /** * 그룹 저장 (UPDATE) */ @RequestMapping(value = "/onl/admin/inflow/inflowGroupControlMan.json", params = "cmd=UPDATE") - public String update(HttpServletRequest request, HttpServletResponse response, InflowGroupControlManUI ui, + public ResponseEntity update(HttpServletRequest request, HttpServletResponse response, InflowGroupControlManUI ui, @RequestParam(value = "interfaceListJson", required = false) String interfaceListJson) throws Exception { parseInterfaceList(ui, interfaceListJson); String modifiedBy = getSessionUserId(request); @@ -105,21 +105,21 @@ public class InflowGroupControlManController extends OnlBaseAnnotationController CommonCommand command = new CommonCommand("com.eactive.eai.agent.inflow.ReloadInflowGroupControlCommand", ui.getGroupId()); agentUtilService.broadcast(command); - return null; + return ResponseEntity.ok().build(); } /** * 그룹 삭제 */ @RequestMapping(value = "/onl/admin/inflow/inflowGroupControlMan.json", params = "cmd=DELETE") - public String delete(HttpServletRequest request, HttpServletResponse response, String groupId) throws Exception { + public ResponseEntity delete(HttpServletRequest request, HttpServletResponse response, String groupId) throws Exception { service.deleteGroup(groupId); // Agent Command 전송 CommonCommand command = new CommonCommand("com.eactive.eai.agent.inflow.RemoveInflowGroupControlCommand", groupId); agentUtilService.broadcast(command); - return null; + return ResponseEntity.ok().build(); } /** diff --git a/src/main/java/com/eactive/eai/rms/onl/manage/rule/transform2/Transform2Service.java b/src/main/java/com/eactive/eai/rms/onl/manage/rule/transform2/Transform2Service.java index a667814..cc2e444 100644 --- a/src/main/java/com/eactive/eai/rms/onl/manage/rule/transform2/Transform2Service.java +++ b/src/main/java/com/eactive/eai/rms/onl/manage/rule/transform2/Transform2Service.java @@ -171,7 +171,8 @@ public class Transform2Service extends BaseService { private String genConversionSourceItems(String srcLayoutName, String cnvsncmdname) { - Pattern pattern = Pattern.compile(srcLayoutName + "(\\w|\\[|\\]|\\*|\\.|-|:)*"); + // \uAC00-\uD7A3 : 한글 전체 ('가' ~ '힣') + Pattern pattern = Pattern.compile(srcLayoutName + "[\\w\\.\\[\\]\\*\\-:\\uAC00-\\uD7A3]*"); Matcher matcher = pattern.matcher(cnvsncmdname); StringBuilder result = new StringBuilder(); diff --git a/src/main/java/com/eactive/eai/rms/onl/manage/serviceinfo/stdmessage/StdMessageManController.java b/src/main/java/com/eactive/eai/rms/onl/manage/serviceinfo/stdmessage/StdMessageManController.java index ec5f5ce..6482828 100644 --- a/src/main/java/com/eactive/eai/rms/onl/manage/serviceinfo/stdmessage/StdMessageManController.java +++ b/src/main/java/com/eactive/eai/rms/onl/manage/serviceinfo/stdmessage/StdMessageManController.java @@ -9,6 +9,7 @@ import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; @@ -52,7 +53,7 @@ public class StdMessageManController extends BaseController { @PostMapping(value = "/onl/admin/service/stdMessageMan.json", params = "cmd=LIST") public ResponseEntity> selectList(Pageable pageable, String searchBzwkSvcKeyName, String searchEaiSvcCode, String searchEaiSendRecv, String searchEaiDirection) { - List map = service + Page map = service .selectList(pageable, searchBzwkSvcKeyName, searchEaiSvcCode, searchEaiSendRecv, searchEaiDirection); return ResponseEntity.ok(new GridResponse<>(map)); diff --git a/src/main/java/com/eactive/eai/rms/onl/manage/serviceinfo/stdmessage/StdMessageManService.java b/src/main/java/com/eactive/eai/rms/onl/manage/serviceinfo/stdmessage/StdMessageManService.java index 15d84a6..6ecbf58 100644 --- a/src/main/java/com/eactive/eai/rms/onl/manage/serviceinfo/stdmessage/StdMessageManService.java +++ b/src/main/java/com/eactive/eai/rms/onl/manage/serviceinfo/stdmessage/StdMessageManService.java @@ -16,6 +16,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -59,14 +60,13 @@ public class StdMessageManService { @Autowired private ExtendedColumnDefinitionUIMapper extendedColumnDefinitionUIMapper; - public List selectList(Pageable pageable, String searchBzwkSvcKeyName, String searchEaiSvcCode, + public Page selectList(Pageable pageable, String searchBzwkSvcKeyName, String searchEaiSvcCode, String searchEaiSendRecv, String searchEaiDirection) { - return standardMessageInfoService - .findAll(pageable, searchBzwkSvcKeyName, searchEaiSvcCode, searchEaiSendRecv, searchEaiDirection) - .stream() - .map(stdMessageUIMapper::toVo) - .collect(Collectors.toList()); + Page pageResult = standardMessageInfoService + .findAll(pageable, searchBzwkSvcKeyName, searchEaiSvcCode, searchEaiSendRecv, searchEaiDirection); + + return pageResult.map(stdMessageUIMapper::toVo); }