[스프링] 스프링 시큐리티를 이용한 보안 로그인 이력 관리

개요

많은 애플리케이션에서 보안 로그인 이력을 관리하는 것은 매우 중요합니다. 스프링 시큐리티를 사용하여 사용자의 로그인 이력을 관리하고 모니터링하는 방법을 알아보겠습니다.


스프링 시큐리티를 통한 로그인 이력 관리

스프링 시큐리티를 사용하면 사용자의 로그인 이력을 쉽게 관리할 수 있습니다. 이를 위해서는 AuthenticationSuccessHandlerAuthenticationFailureHandler를 구현하여 사용자의 로그인 성공 및 실패 이벤트를 처리할 수 있습니다.

로그인 성공 이벤트

public class CustomAuthenticationSuccessHandler implements AuthenticationSuccessHandler {
    @Override
    public void onAuthenticationSuccess(HttpServletRequest request, 
        HttpServletResponse response, Authentication authentication) 
            throws IOException, ServletException {
        // 로그인 성공 이력 관리 로직 구현
    }
}

로그인 실패 이벤트

public class CustomAuthenticationFailureHandler implements AuthenticationFailureHandler {
    @Override
    public void onAuthenticationFailure(HttpServletRequest request, 
        HttpServletResponse response, AuthenticationException exception) 
            throws IOException, ServletException {
        // 로그인 실패 이력 관리 로직 구현
    }
}

로그인 성공 및 실패 이벤트에서는 사용자의 IP 주소, 브라우저 정보, 로그인 시간 등을 기록하여 보안 로그인 이력을 관리할 수 있습니다.


데이터베이스에 로그인 이력 저장

로그인 이력을 데이터베이스에 저장하여 나중에 모니터링하고 분석할 수 있습니다. 아래는 JPA를 이용한 데이터베이스에 로그인 이력을 저장하는 예시입니다.

@Entity
public class LoginHistory {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String username;
    private String loginTime;
    private String ipAddress;
    private String userAgent;
    
    // getters and setters
}

로그인 이력을 저장하는 서비스 클래스 예시:

@Service
public class LoginHistoryService {
    @Autowired
    private LoginHistoryRepository loginHistoryRepository;

    public void saveLoginHistory(String username, String ipAddress, 
        String userAgent) {
        LoginHistory loginHistory = new LoginHistory();
        loginHistory.setUsername(username);
        loginHistory.setLoginTime(LocalDateTime.now().toString());
        loginHistory.setIpAddress(ipAddress);
        loginHistory.setUserAgent(userAgent);
        
        loginHistoryRepository.save(loginHistory);
    }
}

마무리

스프링 시큐리티를 사용하여 사용자의 로그인 이력을 쉽게 관리하고 데이터베이스에 저장하는 방법을 알아보았습니다. 이를 통해 애플리케이션의 보안을 강화하고 사용자의 활동을 모니터링할 수 있습니다.

참고문헌: