Spring Security는 자바 기반 애플리케이션에서 인증(Authentication)과 권한 부여(Authorization)를 제공하는 강력한 보안 프레임워크입니다. Spring Framework의 하위 프로젝트 중 하나로, 다양한 보안 요구사항을 간편하게 구현할 수 있도록 지원하며, 웹 애플리케이션뿐만 아니라 REST API에서도 널리 사용됩니다.
사용자의 신원을 확인하는 과정입니다.
Spring Security는 다양한 인증 방식을 지원합니다
사용자가 특정 리소스나 기능에 접근할 권한이 있는지 확인하는 과정입니다.
Spring Security는 다음을 통해 권한 부여를 관리합니다
@PreAuthorize
, @Secured
)Spring Security는 HTTP 요청을 처리하기 전에 여러 보안 필터를 거칩니다.
주요 필터
UsernamePasswordAuthenticationFilter
: 사용자의 인증 정보 확인SecurityContextPersistenceFilter
: 보안 컨텍스트 관리ExceptionTranslationFilter
: 인증/권한 문제 처리FilterSecurityInterceptor
: 권한 검증CSRF(Cross-Site Request Forgery) 공격을 방지하기 위해 Spring Security는 CSRF 토큰을 생성하고 검증하는 기능을 제공합니다.
Spring Security는 OAuth2와 JWT(Json Web Token)를 간편하게 통합할 수 있는 기능을 제공하여 현대적인 REST API 보안 요구사항을 충족합니다.
Spring Security의 핵심 구성 요소로, 현재 인증된 사용자 정보와 권한을 저장합니다.
인증 요청을 처리하는 주요 구성 요소로, 사용자 정보를 검증하고 인증 토큰을 반환합니다.
사용자가 가진 권한을 나타냅니다. 예: ROLE_USER
, ROLE_ADMIN
사용자 정보를 가져오는 인터페이스로, 보통 데이터베이스나 외부 시스템에서 사용자 정보를 조회하는 데 사용됩니다.
Spring Security의 초기 버전에서 사용된 방법으로, security-context.xml 파일에 설정을 정의합니다.
Java 기반으로 보안을 설정하며, 유연성과 가독성이 뛰어납니다.
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/public/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll();
}
}
Spring Boot Starter를 사용하면 보안 구성을 최소화할 수 있습니다.
application.properties
를 사용하여 간단히 보안을 설정할 수 있습니다.