From 5afbec0fe4d4ff396bece0d70ef4fe0a1fed6eda Mon Sep 17 00:00:00 2001 From: haerong22 Date: Mon, 15 Mar 2021 23:18:30 +0900 Subject: [PATCH] rest controller practice : login log (aop) --- .../RestControllerApplication.java | 2 + .../common/aop/LoginLogger.java | 62 +++++++++++++++++++ .../restcontroller/logs/entity/Logs.java | 25 ++++++++ .../logs/repository/LogsRepository.java | 9 +++ .../logs/service/LogService.java | 6 ++ .../logs/service/LogServiceImpl.java | 24 +++++++ .../user/controller/ApiLoginController.java | 1 - .../restcontroller/user/entity/User.java | 14 +++++ .../user/service/UserServiceImpl.java | 1 + .../src/main/resources/application.yml | 2 +- 10 files changed, 144 insertions(+), 2 deletions(-) create mode 100644 rest-controller-practice/src/main/java/com/example/restcontroller/common/aop/LoginLogger.java create mode 100644 rest-controller-practice/src/main/java/com/example/restcontroller/logs/entity/Logs.java create mode 100644 rest-controller-practice/src/main/java/com/example/restcontroller/logs/repository/LogsRepository.java create mode 100644 rest-controller-practice/src/main/java/com/example/restcontroller/logs/service/LogService.java create mode 100644 rest-controller-practice/src/main/java/com/example/restcontroller/logs/service/LogServiceImpl.java diff --git a/rest-controller-practice/src/main/java/com/example/restcontroller/RestControllerApplication.java b/rest-controller-practice/src/main/java/com/example/restcontroller/RestControllerApplication.java index 05363f63..5d474e86 100644 --- a/rest-controller-practice/src/main/java/com/example/restcontroller/RestControllerApplication.java +++ b/rest-controller-practice/src/main/java/com/example/restcontroller/RestControllerApplication.java @@ -2,7 +2,9 @@ package com.example.restcontroller; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.EnableAspectJAutoProxy; +@EnableAspectJAutoProxy @SpringBootApplication public class RestControllerApplication { diff --git a/rest-controller-practice/src/main/java/com/example/restcontroller/common/aop/LoginLogger.java b/rest-controller-practice/src/main/java/com/example/restcontroller/common/aop/LoginLogger.java new file mode 100644 index 00000000..0c8c7b9e --- /dev/null +++ b/rest-controller-practice/src/main/java/com/example/restcontroller/common/aop/LoginLogger.java @@ -0,0 +1,62 @@ +package com.example.restcontroller.common.aop; + +import com.example.restcontroller.logs.service.LogService; +import com.example.restcontroller.user.entity.User; +import com.example.restcontroller.user.model.UserLogin; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.springframework.stereotype.Component; + +import java.util.Arrays; + +@Slf4j +@Component +@Aspect +@RequiredArgsConstructor +public class LoginLogger { + + private final LogService logService; + + @Around("execution(* com.example.restcontroller..*.*Service*.*(..))") + public Object log(ProceedingJoinPoint joinPoint) throws Throwable { + + log.info("############################################################"); + log.info("서비스 호출 전!"); + log.info("############################################################"); + + Object result = joinPoint.proceed(); + + if ("login".equals(joinPoint.getSignature().getName())) { + StringBuilder sb = new StringBuilder(); + sb.append("\n") + .append("함수명 : ") + .append(joinPoint.getSignature().getDeclaringType()) + .append(".") + .append(joinPoint.getSignature().getName()) + .append("\n") + .append("매개변수 : "); + + Object[] args = joinPoint.getArgs(); + Arrays.stream(args).forEach((v) -> { + if (v instanceof UserLogin) { + sb.append(v.toString()) + .append("\n") + .append("리턴값 : ") + .append(result.toString()); + } + }); + + logService.add(sb.toString()); + log.info(sb.toString()); + } + + log.info("############################################################"); + log.info("서비스 호출 후!"); + log.info("############################################################"); + + return result; + } +} diff --git a/rest-controller-practice/src/main/java/com/example/restcontroller/logs/entity/Logs.java b/rest-controller-practice/src/main/java/com/example/restcontroller/logs/entity/Logs.java new file mode 100644 index 00000000..229c0ff7 --- /dev/null +++ b/rest-controller-practice/src/main/java/com/example/restcontroller/logs/entity/Logs.java @@ -0,0 +1,25 @@ +package com.example.restcontroller.logs.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.time.LocalDateTime; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +@Entity +public class Logs { + + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Lob + private String text; + + private LocalDateTime regDate; +} diff --git a/rest-controller-practice/src/main/java/com/example/restcontroller/logs/repository/LogsRepository.java b/rest-controller-practice/src/main/java/com/example/restcontroller/logs/repository/LogsRepository.java new file mode 100644 index 00000000..1ede9903 --- /dev/null +++ b/rest-controller-practice/src/main/java/com/example/restcontroller/logs/repository/LogsRepository.java @@ -0,0 +1,9 @@ +package com.example.restcontroller.logs.repository; + +import com.example.restcontroller.logs.entity.Logs; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface LogsRepository extends JpaRepository { +} diff --git a/rest-controller-practice/src/main/java/com/example/restcontroller/logs/service/LogService.java b/rest-controller-practice/src/main/java/com/example/restcontroller/logs/service/LogService.java new file mode 100644 index 00000000..5235ec7b --- /dev/null +++ b/rest-controller-practice/src/main/java/com/example/restcontroller/logs/service/LogService.java @@ -0,0 +1,6 @@ +package com.example.restcontroller.logs.service; + +public interface LogService { + + void add(String text); +} diff --git a/rest-controller-practice/src/main/java/com/example/restcontroller/logs/service/LogServiceImpl.java b/rest-controller-practice/src/main/java/com/example/restcontroller/logs/service/LogServiceImpl.java new file mode 100644 index 00000000..d3f40f25 --- /dev/null +++ b/rest-controller-practice/src/main/java/com/example/restcontroller/logs/service/LogServiceImpl.java @@ -0,0 +1,24 @@ +package com.example.restcontroller.logs.service; + +import com.example.restcontroller.logs.entity.Logs; +import com.example.restcontroller.logs.repository.LogsRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; + +@Service +@RequiredArgsConstructor +public class LogServiceImpl implements LogService{ + + private final LogsRepository logsRepository; + + @Override + public void add(String text) { + + logsRepository.save(Logs.builder() + .text(text) + .regDate(LocalDateTime.now()) + .build()); + } +} diff --git a/rest-controller-practice/src/main/java/com/example/restcontroller/user/controller/ApiLoginController.java b/rest-controller-practice/src/main/java/com/example/restcontroller/user/controller/ApiLoginController.java index 8b9e4267..7803e810 100644 --- a/rest-controller-practice/src/main/java/com/example/restcontroller/user/controller/ApiLoginController.java +++ b/rest-controller-practice/src/main/java/com/example/restcontroller/user/controller/ApiLoginController.java @@ -28,7 +28,6 @@ public class ApiLoginController { if (bindingResult.hasFieldErrors()) { return ResponseResult.fail("입력값이 정확하지 않습니다.", ResponseError.of(bindingResult.getFieldErrors())); } - User user = userService.login(userLogin); UserLoginToken userLoginToken = JWTUtils.createToken(user) diff --git a/rest-controller-practice/src/main/java/com/example/restcontroller/user/entity/User.java b/rest-controller-practice/src/main/java/com/example/restcontroller/user/entity/User.java index 312e764f..f573f929 100644 --- a/rest-controller-practice/src/main/java/com/example/restcontroller/user/entity/User.java +++ b/rest-controller-practice/src/main/java/com/example/restcontroller/user/entity/User.java @@ -112,4 +112,18 @@ public class User { return status.toString(); } + @Override + public String toString() { + return "User{" + + "id=" + id + + ", email='" + email + '\'' + + ", userName='" + userName + '\'' + + ", password='" + password + '\'' + + ", phone='" + phone + '\'' + + ", status=" + status + + ", lockYn=" + lockYn + + ", regDate=" + regDate + + ", updateDate=" + updateDate + + '}'; + } } diff --git a/rest-controller-practice/src/main/java/com/example/restcontroller/user/service/UserServiceImpl.java b/rest-controller-practice/src/main/java/com/example/restcontroller/user/service/UserServiceImpl.java index 1fa227ae..146e1bb6 100644 --- a/rest-controller-practice/src/main/java/com/example/restcontroller/user/service/UserServiceImpl.java +++ b/rest-controller-practice/src/main/java/com/example/restcontroller/user/service/UserServiceImpl.java @@ -3,6 +3,7 @@ package com.example.restcontroller.user.service; import com.example.restcontroller.board.model.ServiceResult; import com.example.restcontroller.common.exception.BizException; +import com.example.restcontroller.logs.service.LogService; import com.example.restcontroller.user.entity.User; import com.example.restcontroller.user.entity.UserInterest; import com.example.restcontroller.user.entity.UserStatus; diff --git a/rest-controller-practice/src/main/resources/application.yml b/rest-controller-practice/src/main/resources/application.yml index 27fc1d1f..a2c0b7df 100644 --- a/rest-controller-practice/src/main/resources/application.yml +++ b/rest-controller-practice/src/main/resources/application.yml @@ -23,7 +23,7 @@ spring: jackson: serialization: - fail-on-empty-beans: false + fail-on-empty-beans: true mvc: hiddenmethod: