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 () => {
+
+
+
+
- |
+ 선택 |
Key |
Hash |
Algorithm |
@@ -52,7 +60,7 @@ onMounted(async () => {
{{ 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;
+ }
+}