2013-01-18 2 views
1

사용자에게 스프링 보안을 사용하여 한 데이터베이스에서 다른 데이터베이스로 사용자를 어떻게 마이그레이션 할 수 있습니까?스프링 보안을 사용하여 로그인시 사용자 생성

배경

우리는 웹 애플리케이션에서 폼 기반 인증과 함께 스프링 보안을 사용합니다. 우리의 설정은 사용자 데이터베이스가 지원하는 표준 Spring JDBC 컴포넌트를 사용합니다. 그러나 이전 시스템의 다른 사용자 데이터베이스도 있는데 이는 새 사용자와 비교하여 사용자 수가 대략 10 배입니다. 이전 데이터베이스의 사용자도 로그인 할 수있게하려고합니다. 사용자는 완전히 투명해야합니다.

이전 데이터베이스의 사용자 대부분이 더 이상 활성 상태가 아니기 때문에 모든 데이터베이스를 새 데이터베이스로 마이그레이션하지 않으려합니다. 성능상의 이유로 새로운 사용자 데이터베이스는 가능한 한 작게 유지하면서 여전히 활성 사용자를 모두 포함합니다. 일정 기간이 지나면 이전 사용자 데이터베이스의 연결을 끊고 모든 비활성 사용자를 효과적으로 삭제하려고합니다.

우리가 생각해 낸 아이디어는 필요에 따라 사용자를 마이그레이션하는 것입니다. 존재하지 않는 사용자 (새 데이터베이스가 아닌)가 로그인을 시도하면 사용자가 이전 사용자 데이터베이스에 대해 인증 할 수 있는지 확인한 다음 사용자를 새 데이터베이스로 마이그레이션하고 자동으로 로그인합니다.

스프링 보안 프레임 워크에는 많은 확장 포인트가 있습니다. 우리의 목적에 맞는 확장 포인트가 있습니까?

답변

0

가장 좋은 장소는 org.springframework.security.authentication이라고 생각합니다. 인증 관리자. 서로 다른 두 개의 AuthenticationProvider 인스턴스 (새 데이터베이스와 이전 데이터베이스 용)를 준비 할 수 있습니다. defManager AuthenticationManager (실제로는 ProviderManager 클래스)에 삽입하면 두 공급자를 모두 반복하여 성공한 첫 번째 인증 결과를 얻을 수 있습니다. 귀하의 사용자 정의의 AuthenticationManager는 약간 다른 논리해야합니다 : 그것은 이전 데이터베이스를 확인합니다 그것이 BadCredentialsException의 경우 새 데이터베이스

  • 을 확인합니다이 두 업체 모두의
  • 의 차이를 알 수

    • 사용자가 이전 데이터베이스를 통해 인증 된 경우 계정 레코드를 복사합니다.
    • 모든 인증이 성공했는지 확인하기 위해 첫 번째 AuthenticationProvider를 호출하는 것이 좋습니다.
  • +0

    감사합니다. Maksym, 우리는 당신의 접근 방식을 시도 할 것입니다. –

    관련 문제