블로그나 인프런에서 Spring security를 찾아보면 Spring 2버전의 글과 영상이 대부분입니다. 그래서 제가 한번 3버전의 글을 올려 보고자 합니다. ㅎㅎ
Spring Security란
스프링 프레임워크 기반의 애플리케이션에서 인증(Authentication)과 권한 부여(Authorization)를 관리하는 강력한 보안 프레임워크입니다. 주요 기능으로는 사용자의 신원을 확인하고, 특정 리소스나 기능에 대한 접근 권한을 제어하는 것입니다. 이 프레임워크는 다양한 인증 메커니즘을 지원하며, 사용자 정의가 용이하도록 설계되었습니다.
구성요소
-
Authentication(인증)
- 사용자의 신원을 확인하는 과정입니다. 예를 들어, 사용자 이름과 비밀번호를 입력하여 사용자가 누구인지 식별합니다.
- 스프링 시큐리티에서는 AuthenticationManager가 인증을 처리하며, 사용자 정보를 담고 있는 Authentication 객체를 반환합니다.
-
Authorization(권한 부여)
- 인증된 사용자가 어떤 리소스나 기능에 접근할 수 있는지를 결정하는 과정입니다. 예를 들어, 관리자만 특정 페이지에 접근할 수 있도록 설정합니다.
- 권한은 GrantedAuthority로 표현되며, SecurityContext에 저장된 사용자의 Authentication 객체를 통해 확인할 수 있습니다.
-
SecurityContext
- 현재 인증된 사용자에 대한 정보를 담고 있는 컨텍스트입니다. SecurityContextHolder를 통해 전역적으로 접근할 수 있으며, SecurityContext는 Authentication 객체를 보관합니다.
-
Filter Chain
- 다양한 보안 필터들이 체인으로 구성되어 요청을 처리합니다. 각 필터는 인증이나 권한 부여 등의 보안 작업을 수행합니다.
- 스프링 시큐리티는 UsernamePasswordAuthenticationFilter, JwtFilter와 같은 다양한 기본 필터를 제공합니다.
-
HttpSecurity
- 웹 애플리케이션 보안을 구성하는 데 사용되는 주요 클래스입니다. 보안 설정을 통해 URL 패턴, 인증 방법, 권한 부여 규칙 등을 정의할 수 있습니다.
- 주로 configure(HttpSecurity http) 메서드를 오버라이드하여 보안 설정을 적용합니다.
-
AuthenticationManager
- 인증을 처리하는 인터페이스로, authenticate 메서드를 통해 사용자의 인증을 처리합니다.
-
UserDetailsService
- 사용자 정보를 가져오는 서비스입니다. 주로 데이터베이스에서 사용자 정보를 조회하여 UserDetails 객체를 반환합니다.
- 사용자 인증을 위해 loadUserByUsername 메서드를 구현해야 합니다.