From 8207b91fbc687d2f13658ca6a7904d93855eea59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=B2=9C=20=EC=A7=84=EA=B0=95?= <jjjjjk12@ajou.ac.kr> Date: Mon, 24 Mar 2025 19:00:48 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20DB=20=EC=97=B0=EA=B4=80=EA=B4=80?= =?UTF-8?q?=EA=B3=84=20=EC=88=98=EC=A0=95,=20=EB=A1=9C=EA=B7=B8=20?= =?UTF-8?q?=EB=A9=94=EC=84=B8=EC=A7=80=EA=B0=80=20=EC=9E=98=EB=AA=BB?= =?UTF-8?q?=EB=90=98=EC=96=B4=EC=9E=88=EB=8D=98=20=EB=AC=B8=EC=A0=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../itda/aspect/ForwardingLogAspect.java | 15 +++--- .../aolda/itda/aspect/RoutingLogAspect.java | 51 ++++++++++++------- .../itda/entity/certificate/Certificate.java | 2 +- .../itda/entity/forwarding/Forwarding.java | 5 -- .../java/com/aolda/itda/entity/log/Log.java | 2 +- .../aolda/itda/entity/routing/Routing.java | 6 +-- .../itda/repository/log/LogQueryDSL.java | 30 +++++------ .../com/aolda/itda/service/AuthService.java | 2 +- 8 files changed, 58 insertions(+), 55 deletions(-) diff --git a/src/main/java/com/aolda/itda/aspect/ForwardingLogAspect.java b/src/main/java/com/aolda/itda/aspect/ForwardingLogAspect.java index f515ab6..d50c2fe 100644 --- a/src/main/java/com/aolda/itda/aspect/ForwardingLogAspect.java +++ b/src/main/java/com/aolda/itda/aspect/ForwardingLogAspect.java @@ -23,6 +23,7 @@ import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; @@ -46,7 +47,7 @@ public class ForwardingLogAspect { /* 사용자 조회 */ HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); - Map<String, String> tmp = (Map<String, String>) request.getSession().getAttribute("user"); + Map<String, String> tmp = (Map<String, String>) request.getAttribute("user"); User user = userRepository.findByKeystoneId(tmp.get("id")).orElseThrow( () -> new CustomException(ErrorCode.NOT_FOUND_USER) ); @@ -65,7 +66,7 @@ public class ForwardingLogAspect { .user(user) .objectType(ObjectType.FORWARDING) .objectId(forwarding.getForwardingId()) - .action(Action.UPDATE) + .action(Action.CREATE) .projectId(forwarding.getProjectId()) .description(description) .build()); @@ -77,7 +78,7 @@ public class ForwardingLogAspect { /* 사용자 조회 */ HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); - Map<String, String> tmp = (Map<String, String>) request.getSession().getAttribute("user"); + Map<String, String> tmp = (Map<String, String>) request.getAttribute("user"); User user = userRepository.findByKeystoneId(tmp.get("id")).orElseThrow( () -> new CustomException(ErrorCode.NOT_FOUND_USER) ); @@ -99,7 +100,7 @@ public class ForwardingLogAspect { .user(user) .objectType(ObjectType.FORWARDING) .objectId(forwarding.getForwardingId()) - .action(Action.UPDATE) + .action(Action.DELETE) .projectId(forwarding.getProjectId()) .description(description) .build()); @@ -111,7 +112,7 @@ public class ForwardingLogAspect { /* 사용자 조회 */ HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); - Map<String, String> tmp = (Map<String, String>) request.getSession().getAttribute("user"); + Map<String, String> tmp = (Map<String, String>) request.getAttribute("user"); User user = userRepository.findByKeystoneId(tmp.get("id")).orElseThrow( () -> new CustomException(ErrorCode.NOT_FOUND_USER) ); @@ -134,8 +135,8 @@ public class ForwardingLogAspect { /* 로그 메세지 작성 */ String description = "name: " + old.getName() + (old.getName().equals(newObj.getName()) ? "" : (" -> " + newObj.getName())) + "\n" + "serverPort: " + old.getServerPort() + (old.getServerPort().equals(newObj.getServerPort()) ? "" : (" -> " + newObj.getServerPort())) + "\n" - + "instanceIp: " + (old.getInstanceIp().equals(newObj.getInstanceIp()) ? "" : (" -> " + newObj.getInstanceIp())) + "\n" - + "instancePort: " + (old.getInstancePort().equals(newObj.getInstancePort()) ? "" : (" -> " + newObj.getInstancePort())); + + "instanceIp: " + old.getInstanceIp() + (old.getInstanceIp().equals(newObj.getInstanceIp()) ? "" : (" -> " + newObj.getInstanceIp())) + "\n" + + "instancePort: " + old.getInstancePort() + (old.getInstancePort().equals(newObj.getInstancePort()) ? "" : (" -> " + newObj.getInstancePort())); /* 로그 엔티티 저장 */ logRepository.save(Log.builder() diff --git a/src/main/java/com/aolda/itda/aspect/RoutingLogAspect.java b/src/main/java/com/aolda/itda/aspect/RoutingLogAspect.java index c8b052a..a3a67d2 100644 --- a/src/main/java/com/aolda/itda/aspect/RoutingLogAspect.java +++ b/src/main/java/com/aolda/itda/aspect/RoutingLogAspect.java @@ -23,6 +23,7 @@ import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; @@ -46,7 +47,7 @@ public class RoutingLogAspect { /* 사용자 조회 */ HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); - Map<String, String> tmp = (Map<String, String>) request.getSession().getAttribute("user"); + Map<String, String> tmp = (Map<String, String>) request.getAttribute("user"); User user = userRepository.findByKeystoneId(tmp.get("id")).orElseThrow( () -> new CustomException(ErrorCode.NOT_FOUND_USER) ); @@ -58,16 +59,16 @@ public class RoutingLogAspect { String description = "name: " + routing.getName() + "\n" + "domain: " + routing.getDomain() + "\n" + "ip: " + routing.getInstanceIp() + "\n" - + "ip: " + routing.getInstancePort() + "\n" - + "certificateId: " + routing.getCertificate().getCertificateId() + "\n" + + "port: " + routing.getInstancePort() + "\n" + + (routing.getCertificate() != null ? ("certificateId: " + routing.getCertificate().getCertificateId() + "\n") : "") + "caching: " + routing.getCaching() + "\n"; /* 로그 엔티티 저장 */ logRepository.save(Log.builder() .user(user) - .objectType(ObjectType.FORWARDING) + .objectType(ObjectType.ROUTING) .objectId(routing.getRoutingId()) - .action(Action.UPDATE) + .action(Action.CREATE) .projectId(routing.getProjectId()) .description(description) .build()); @@ -79,7 +80,7 @@ public class RoutingLogAspect { /* 사용자 조회 */ HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); - Map<String, String> tmp = (Map<String, String>) request.getSession().getAttribute("user"); + Map<String, String> tmp = (Map<String, String>) request.getAttribute("user"); User user = userRepository.findByKeystoneId(tmp.get("id")).orElseThrow( () -> new CustomException(ErrorCode.NOT_FOUND_USER) ); @@ -94,28 +95,28 @@ public class RoutingLogAspect { String description = "name: " + routing.getName() + "\n" + "domain: " + routing.getDomain() + "\n" + "ip: " + routing.getInstanceIp() + "\n" - + "ip: " + routing.getInstancePort() + "\n" - + "certificateId: " + routing.getCertificate().getCertificateId() + "\n" + + "port: " + routing.getInstancePort() + "\n" + + (routing.getCertificate() != null ? ("certificateId: " + routing.getCertificate().getCertificateId() + "\n") : "") + "caching: " + routing.getCaching() + "\n"; /* 로그 엔티티 저장 */ logRepository.save(Log.builder() .user(user) - .objectType(ObjectType.FORWARDING) + .objectType(ObjectType.ROUTING) .objectId(routing.getRoutingId()) - .action(Action.UPDATE) + .action(Action.DELETE) .projectId(routing.getProjectId()) .description(description) .build()); } /* Update(edit) 로깅 */ - @Around("execution(* com.aolda.itda.service.forwarding.*Service.*edit*(..))") + @Around("execution(* com.aolda.itda.service.routing.*Service.*edit*(..))") public Object editLogging(ProceedingJoinPoint joinPoint) throws Throwable { /* 사용자 조회 */ HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); - Map<String, String> tmp = (Map<String, String>) request.getSession().getAttribute("user"); + Map<String, String> tmp = (Map<String, String>) request.getAttribute("user"); User user = userRepository.findByKeystoneId(tmp.get("id")).orElseThrow( () -> new CustomException(ErrorCode.NOT_FOUND_USER) ); @@ -136,17 +137,29 @@ public class RoutingLogAspect { Routing newObj = routingRepository.findByRoutingIdAndIsDeleted(id, false).orElse(null); /* 로그 메세지 작성 */ - String description = "name: " + old.getName() + (old.getName().equals(newObj.getName()) ? "" : (" -> " + newObj.getName())) + "\n" - + "domain: " + old.getDomain() + (old.getDomain().equals(newObj.getDomain()) ? "" : (" -> " + newObj.getDomain())) + "\n" - + "ip: " + (old.getInstanceIp().equals(newObj.getInstanceIp()) ? "" : (" -> " + newObj.getInstanceIp())) + "\n" - + "port: " + (old.getInstancePort().equals(newObj.getInstancePort()) ? "" : (" -> " + newObj.getInstancePort())) + "\n" - + "certificateId: " + (old.getCertificate().getCertificateId() == newObj.getCertificate().getCertificateId() ? "" : (" -> " + newObj.getCertificate().getCertificateId())) - + "certificateId: " + (old.getCaching() == newObj.getCaching() ? "" : (" -> " + newObj.getCaching())); + String description = "name: " + old.getName() + (old.getName().equals(newObj.getName()) ? "" : " -> " + newObj.getName()) + "\n" + + "domain: " + old.getDomain() + (old.getDomain().equals(newObj.getDomain()) ? "" : " -> " + newObj.getDomain()) + "\n" + + "ip: " + old.getInstanceIp() + (old.getInstanceIp().equals(newObj.getInstanceIp()) ? "" : " -> " + newObj.getInstanceIp()) + "\n" + + "port: " + old.getInstancePort() + (old.getInstancePort().equals(newObj.getInstancePort()) ? "" : " -> " + newObj.getInstancePort()) + "\n"; + if (old.getCertificate() == null) { + if (newObj.getCertificate() != null) { + description = description + "certificateId: null -> " + newObj.getCertificate().getCertificateId() + "\n"; + } + } + else { + if (newObj.getCertificate() == null) { + description = description + "certificateId: " + old.getCertificate().getCertificateId() + " -> null\n"; + } + else { + description = description + "certificateId: " + old.getCertificate().getCertificateId() + " -> " + newObj.getCertificate().getCertificateId() + "\n"; + } + } + description = description + "caching: " + (old.getCaching() == newObj.getCaching() ? newObj.getCaching() : (" -> " + newObj.getCaching())); /* 로그 엔티티 저장 */ logRepository.save(Log.builder() .user(user) - .objectType(ObjectType.FORWARDING) + .objectType(ObjectType.ROUTING) .objectId(newObj.getRoutingId()) .action(Action.UPDATE) .projectId(newObj.getProjectId()) diff --git a/src/main/java/com/aolda/itda/entity/certificate/Certificate.java b/src/main/java/com/aolda/itda/entity/certificate/Certificate.java index 188f05e..a23cf85 100644 --- a/src/main/java/com/aolda/itda/entity/certificate/Certificate.java +++ b/src/main/java/com/aolda/itda/entity/certificate/Certificate.java @@ -23,7 +23,7 @@ public class Certificate extends BaseTimeEntity { @Column(nullable = false) private Long certificateId; - @OneToOne + @ManyToOne @JoinColumn(nullable = false, name = "user_id") private User user; diff --git a/src/main/java/com/aolda/itda/entity/forwarding/Forwarding.java b/src/main/java/com/aolda/itda/entity/forwarding/Forwarding.java index 86f46b7..0e5e505 100644 --- a/src/main/java/com/aolda/itda/entity/forwarding/Forwarding.java +++ b/src/main/java/com/aolda/itda/entity/forwarding/Forwarding.java @@ -20,10 +20,6 @@ public class Forwarding extends BaseTimeEntity { @Column(nullable = false) private Long forwardingId; - @OneToOne - @JoinColumn(name = "user_id") - private User user; - private String projectId; private String serverIp; @@ -40,7 +36,6 @@ public class Forwarding extends BaseTimeEntity { public Forwarding(Forwarding forwarding) { this.forwardingId = forwarding.getForwardingId(); - this.user = forwarding.getUser(); this.projectId = forwarding.getProjectId(); this.serverIp = forwarding.getServerIp(); this.serverPort = forwarding.getServerPort(); diff --git a/src/main/java/com/aolda/itda/entity/log/Log.java b/src/main/java/com/aolda/itda/entity/log/Log.java index 373a836..9832ab2 100644 --- a/src/main/java/com/aolda/itda/entity/log/Log.java +++ b/src/main/java/com/aolda/itda/entity/log/Log.java @@ -23,7 +23,7 @@ public class Log extends BaseTimeEntity { @Column(nullable = false) private Long logId; - @OneToOne + @ManyToOne @JoinColumn(name = "user_id", nullable = false) private User user; diff --git a/src/main/java/com/aolda/itda/entity/routing/Routing.java b/src/main/java/com/aolda/itda/entity/routing/Routing.java index 39b7716..de13d82 100644 --- a/src/main/java/com/aolda/itda/entity/routing/Routing.java +++ b/src/main/java/com/aolda/itda/entity/routing/Routing.java @@ -24,11 +24,7 @@ public class Routing extends BaseTimeEntity { @Column(nullable = false) private Long routingId; - @OneToOne - @JoinColumn(name = "user_id") - private User user; - - @OneToOne + @ManyToOne @JoinColumn(name = "certificate_id") private Certificate certificate; diff --git a/src/main/java/com/aolda/itda/repository/log/LogQueryDSL.java b/src/main/java/com/aolda/itda/repository/log/LogQueryDSL.java index 3ec962b..ceba4b2 100644 --- a/src/main/java/com/aolda/itda/repository/log/LogQueryDSL.java +++ b/src/main/java/com/aolda/itda/repository/log/LogQueryDSL.java @@ -74,31 +74,29 @@ public class LogQueryDSL { builder.and(log.projectId.eq(projectId)); } - /* 오브젝트 타입 조건 ( 기본 : ROUTING ) */ - if (type.equals("certificate")) { - builder.and(log.objectType.eq(ObjectType.CERTIFICATE)); - } - else if (type.equals("forwarding")) { - builder.and(log.objectType.eq(ObjectType.FORWARDING)); - } - else { - builder.and(log.objectType.eq(ObjectType.ROUTING)); + /* 오브젝트 타입 조건 */ + if (type != null) { + switch (type) { + case "certificate" -> builder.and(log.objectType.eq(ObjectType.CERTIFICATE)); + case "forwarding" -> builder.and(log.objectType.eq(ObjectType.FORWARDING)); + case "routing" -> builder.and(log.objectType.eq(ObjectType.ROUTING)); + } } + /* 사용자 ID 조건 */ if (username != null) { builder.and(log.user.keystoneUsername.eq(username)); } /* CUD 조건 */ - if (action.equals("create")) { - builder.and(log.action.eq(Action.CREATE)); - } else if (action.equals("update")) { - builder.and(log.action.eq(Action.UPDATE)); - } else if (action.equals("delete")) { - builder.and(log.action.eq(Action.DELETE)); + if (action != null) { + switch (action) { + case "create" -> builder.and(log.action.eq(Action.CREATE)); + case "update" -> builder.and(log.action.eq(Action.UPDATE)); + case "delete" -> builder.and(log.action.eq(Action.DELETE)); + } } - return builder; } } diff --git a/src/main/java/com/aolda/itda/service/AuthService.java b/src/main/java/com/aolda/itda/service/AuthService.java index be6d764..80c53d3 100644 --- a/src/main/java/com/aolda/itda/service/AuthService.java +++ b/src/main/java/com/aolda/itda/service/AuthService.java @@ -51,7 +51,7 @@ public class AuthService { User entity = userRepository.findByKeystoneUsername(userId).orElse(null); if (entity == null) { userRepository.save(User.builder().keystoneId(validateTokenAndGetUserId(token)). - keystoneUsername(userId).build()); + keystoneUsername(loginRequestDTO.getId()).build()); } response.addHeader("X-Subject-Token", systemToken != null ? systemToken : token); -- GitLab