From f558c2bb6291f4ab60da84ad5b5a626cbdbf0483 Mon Sep 17 00:00:00 2001 From: "icksishu@gmail.com" Date: Fri, 12 Dec 2025 16:17:03 +0900 Subject: [PATCH] =?UTF-8?q?Key=20=EA=B4=80=EB=A6=AC=20=EA=B8=B0=EB=8A=A5?= =?UTF-8?q?=20=EC=9E=91=EC=97=85=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 6 ++- src/main/front/src/components/apiClient.js | 40 +++++++++++++++++++ .../front/src/views/CryptoKeyManageView.vue | 12 +++++- src/main/front/src/views/MainView.vue | 2 +- .../app/agent/DfxAgentInfoController.java | 7 ++++ .../agent/service/DfxCryptoKeyService.java | 39 ++++++++++++++++++ 6 files changed, 102 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/service/DfxCryptoKeyService.java diff --git a/build.gradle b/build.gradle index ff16a7e..498be03 100644 --- a/build.gradle +++ b/build.gradle @@ -25,7 +25,10 @@ catch (Exception ignored) { // gradle project properties -> application.yml processResources { filesMatching('**/application.yml') { - expand(project.properties + [commitId: gitCommitId, version: version]) + expand(project.properties + [ + commitId: gitCommitId, version: version, + user: [home: System.getProperty('user.home')] + ]) } } @@ -59,6 +62,7 @@ dependencies { implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.4' implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16' implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.17.0' + implementation 'org.bouncycastle:bcprov-jdk18on:1.83' runtimeOnly 'com.ibm.db2:jcc' runtimeOnly 'com.microsoft.sqlserver:mssql-jdbc' runtimeOnly 'com.mysql:mysql-connector-j' diff --git a/src/main/front/src/components/apiClient.js b/src/main/front/src/components/apiClient.js index fa9a0ef..6ddd8cd 100644 --- a/src/main/front/src/components/apiClient.js +++ b/src/main/front/src/components/apiClient.js @@ -1,7 +1,47 @@ import axios from 'axios' +import router from '@/router' const apiClient = axios.create({ headers: { 'Content-Type': 'application/json' } }) +let isHandlingAuthError = false +async function handleAuthError(status) { + if (isHandlingAuthError) { + return + } + isHandlingAuthError = true + try { + try { + await apiClient.post('/public-api/logoutProcess') + } catch (e) { + // 로그아웃 안되도 무시 + } + if (router.currentRoute.value.path != '/login') { + router.replace({ + path: '/login', + query: { + reason: String(status), + }, + }) + } + } finally { + setTimeout(() => { + isHandlingAuthError = false + }, 20) + } +} + +apiClient.interceptors.response.use( + (response) => response, + async (error) => { + const status = error?.response?.status + // 기타 오류 처리시 로직 추가 + if (status === 401 || status === 403) { + await handleAuthError(status) + } + return Promise.reject(error) + }, +) + export function useApiClient() { return apiClient } diff --git a/src/main/front/src/views/CryptoKeyManageView.vue b/src/main/front/src/views/CryptoKeyManageView.vue index 0e8e38a..e1bec56 100644 --- a/src/main/front/src/views/CryptoKeyManageView.vue +++ b/src/main/front/src/views/CryptoKeyManageView.vue @@ -13,6 +13,10 @@ async function getCryptoKeyDtoList() { let dfxCryptoKeyDtoList = ref([]) const cryptoKeyDto = reactive({}) +async function generateNewKey() {} + +async function saveList() {} + onMounted(async () => { dfxCryptoKeyDtoList.value = await getCryptoKeyDtoList() }) @@ -27,10 +31,14 @@ onMounted(async () => {
+
+ + +
- + @@ -52,7 +60,7 @@ onMounted(async () => { - +
선택 Key Hash Algorithm{{ cryptoKeyDto.dataEncryptionYn }}
no datas.no datas.
diff --git a/src/main/front/src/views/MainView.vue b/src/main/front/src/views/MainView.vue index fe7f888..b8c6978 100644 --- a/src/main/front/src/views/MainView.vue +++ b/src/main/front/src/views/MainView.vue @@ -69,7 +69,7 @@ const currentContent = computed(() => { Agents
  • - Crypto Keys + Crypto Keys
  • Messages diff --git a/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/DfxAgentInfoController.java b/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/DfxAgentInfoController.java index 7b9c8c4..0fa4de0 100644 --- a/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/DfxAgentInfoController.java +++ b/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/DfxAgentInfoController.java @@ -21,6 +21,7 @@ import java.util.Map; public class DfxAgentInfoController { private final DfxAgentInfoService dfxAgentInfoService; private final DfxAgentMessageHistoryService dfxAgentMessageHistoryService; + private final DfxCryptoKeyService dfxCryptoKeyService; @PostMapping("/app-api/agent/getAgentInfoDtoList") public ResponseEntity> agentConfigDtoList() { @@ -85,4 +86,10 @@ public class DfxAgentInfoController { List dfxAgentMessageHistoryDtoList = dfxAgentMessageHistoryService.selectDfxAgentMessageHistoryDtoList(); return ResponseEntity.ok().body(dfxAgentMessageHistoryDtoList); } + + @PostMapping("/app-api/agent/getCryptoKeyDtoList") + public ResponseEntity> getCryptoKeyDtoList() { + List dfxCryptoKeyDtoList = dfxCryptoKeyService.selectDfxCryptoKeyList(); + return ResponseEntity.ok().body(dfxCryptoKeyDtoList); + } } diff --git a/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/service/DfxCryptoKeyService.java b/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/service/DfxCryptoKeyService.java new file mode 100644 index 0000000..5082a00 --- /dev/null +++ b/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/service/DfxCryptoKeyService.java @@ -0,0 +1,39 @@ +package com.bsmlab.dfx.dfxconsole.app.agent.service; + +import com.bsmlab.dfx.dfxconsole.framework.dto.SearchParameterDto; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import org.springframework.stereotype.Service; + +import javax.crypto.KeyGenerator; +import javax.crypto.SecretKey; +import java.security.NoSuchAlgorithmException; +import java.security.NoSuchProviderException; +import java.security.SecureRandom; +import java.security.Security; +import java.util.List; + +@Service +@Slf4j +@RequiredArgsConstructor +public class DfxCryptoKeyService { + private final DfxCryptoKeyMapper cryptoKeyMapper; + + public List selectDfxCryptoKeyList() { + List dfxCryptoKeyDtoList = cryptoKeyMapper.selectDfxCryptoKeyList(SearchParameterDto.builder().build()); + return dfxCryptoKeyDtoList; + } + + public DfxCryptoKeyDto generateNewKey() throws NoSuchAlgorithmException, NoSuchProviderException { + DfxCryptoKeyDto dfxCryptoKeyDto = DfxCryptoKeyDto.builder().build(); + Security.addProvider(new BouncyCastleProvider()); + KeyGenerator keyGenerator = KeyGenerator.getInstance("ARIA", "BC"); + keyGenerator.init(256, new SecureRandom()); + SecretKey key = keyGenerator.generateKey(); + + return dfxCryptoKeyDto; + } +}