Files
sdl_base/doc/공통기능/보안관리/개인정보사용이력관리.adoc
2026-05-29 17:49:25 +09:00

93 lines
3.2 KiB
Plaintext

= 개인정보 사용 이력 관리
== 개요
사용자 정보를 조회한 이력을 남긴다. 관련 법에 따라 일정기간 동안 보관한다.
=== 사용자 정보 조회 이력 관리
* UserController에서 사용자 정보 관련 메서드 호출시, UserService의 writeUserHistoryLog 메서드를 호출하고 있다.
* log4j2.xml에 설정한 파일에 이력이 남는다.
.UserController.class
[source,java]
----
@Operation(summary = "사용자 목록 조회")
@GetMapping("/auth/users")
public PagingResult<User> getUserPagingList( @ModelAttribute UserSearchDto searchDto) {
PagingResult<User> resultPage = userService.getUserPagingList(searchDto);
// 개인정보조회 이력 남김
userService.writeUserHistoryLog(resultPage);
return resultPage;
}
@Operation(summary = "사용자 조회 (by EP ID)")
@GetMapping("/auth/users/{userId}")
public User userInfo(@Parameter(description = "EP ID", required = true) @PathVariable(required = true) String userId) {
User userInfo = userService.getUserById(userId);
// 개인정보조회 이력 남김
userService.writeUserHistoryLog(userInfo);
return userInfo;
}
----
.UserServiceImpl.class
[source,java]
----
@Override
public void writeUserHistoryLog(Object returnValue) {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
String requestUri = request.getRequestURI();
String requestMethod = request.getMethod();
User user = Account.currentUser();
if(ObjectUtils.isNotEmpty(user)) { // 로그인된 사용자
try {
HistoryLog log = new HistoryLog();
log.setLogId(idGenService.getNextStringId());
log.setNodeId(nodeId);
if(ObjectUtils.isNotEmpty(user)) {
log.setWorkerId(user.getUserId());
log.setWorkerName(user.getUserName());
}
log.setWorkDatetime(DateTime.now().toString());
log.setRemoteAddr(webUtil.getClientIp(request));
log.setRequestMethod(requestMethod);
log.setRequestUri(requestUri);
log.setApiResult(returnValue);
String jsonVal = mapper.writeValueAsString(log);
USER_HISTORY_LOG.info(jsonVal);
} catch (JsonProcessingException e) {
log.warn(e.getMessage());
}
}
}
----
.log4j2.xml
[source,xml]
----
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Appenders>
<RollingFile name="UserHistoryAppender" fileName="/logs/history/user-history-${date:yyyy-MM-dd}-${hostName}.log"
filePattern="/logs/history/user-history-%d{yyyy-MM-dd}-${hostName}.log">
<PatternLayout>
<Pattern>%d %-5p [%t] %-17c{2} \(%13F:%L\) - %m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="UserHistoryLog" level="INFO" additivity="false">
<AppenderRef ref="UserHistoryAppender"/>
</Logger>
</Loggers>
</Configuration>
----