반응형
Spring Security?
Spring 기반의 Java 웹 애플리케이션에서 보안을 담당하는 프레임워크입니다.
주로 웹 애플리케이션에서 사용자 인증(Authentication) 및 권한 부여(Authorization)와 관련된 다양한 보안 기능을 제공합니다.
Spring Security는 개발자들이 보안 관련 기능을 효율적이고 신속하게 구현할 수 있도록 도와줍니다.
IoC/DI 패턴과 같은 확장 패턴을 염두해, 인증/인가 부분을 직접 개발하기 쉽지 않은데, Spring Security에서는 이와 같은 기능들을 제공해 개발 작업의 효율을 높일 수 있습니다.
주요 특징과 개념
- 인증(Authentication)
- Spring Security는 다양한 인증 방식을 지원하는데, 기본적으로 폼 기반 로그인, HTTP 기본 인증, 기존의 사용자 데이터베이스와의 연동을 통한 사용자 인증을 제공합니다.
- 추가로 LDAP,OAuth, OpenID, SAML 등 다양한 인증 프로토콜을 지원합니다.
- 권한 부여(Authorization)
- Spring Security는 애플리케이션 리소스에 대한 접근 권한을 관리합니다. 사용자 또는 그룹에 대한 권한을 설정하여 특정 리소스에 접근할 수 있는지를 결정합니다.
- 권한 부여를 위해 자주 사용되는 개념으로 Role, Authority가 있습니다.
- 세션 관리 및 CSRF 방어
- Spring Security는 세션 관리를 통해 사용자의 로그인 상태를 유지하고, 필요에 따라 세션 타임아웃 및 세션 고정 공격과 같은 보안 공격으로부터 보호합니다.
- CSRF(Cross-Site Request Forgery) 공격 방어를 위한 기능도 제공합니다.
- 보안 이벤트 및 로깅
- Spring Security는 인증 및 권한 부여 과정에서 발생하는 다양한 보안 이벤트를 처리하고, 이를 로깅하여 보안 이슈를 감지하고 추적할 수 있도록 합니다.
- 사용자 정의 필터 및 확장성
- 필터 체인을 통해 사용자 정의 보안 로직을 적용할 수 있습니다. 이를 통해 애플리케이션의 특정 요구 사항에 따라 보안 설정을 확장하고 조정할 수 있습니다.
- Spring Boot와 통합
- Spring Boot와의 높은 통합성을 제공하여, 간단한 설정으로 기본적인 보안 설정을 갖추고 있는 웹 어플리케이션을 쉽게 구성할 수 있습니다.
- CSRF 방어 및 클릭재킹 방어 등의 고급 보안 기능
Spring Security Architecture
Spring의 요청 처리 과정
위의 그림은 Spring에서 프레임워크나 라이브러리를 사용하였을 때, 작동되는 구조를 표현한 그림입니다.
붉은색 박스 부분이 Spring 프레임워크에서 Spring Security가 적용되는 부분입니다.
각각의 영역에 대하여 간단하게 알아보겠습니다.
SpringContextHolder
- SpringContextHolder는 스프링 애플리케이션에서 현재 사용중인 ApplicationContext를 관리하는 유틸리티 클래스 입니다.
- 이 클래스를 통해 ApplicationContext에 쉽게 접근할 수 있습니다.
- Spring Application은 ApplicationContext라는 스프링 컨테이너를 가지며, ApplicationContext는 빈(Bean)의 생성과 관리, 의존성 주입(Dependency Injection) 등을 담당합니다.
- SpringContextHolder는 ApplicationContext에 접근하여 빈을 검색하거나 다른 스프링 관련 작업을 수행하는데 사용됩니다.
- 보통 SpringContextHolder를 사용하지 않고, 직접 ApplicationContext 에 의존성 주입(DI)를 통해 접근하는 것이 권장되는 방법입니다.
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class SpringContextHolder implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringContextHolder.applicationContext = applicationContext;
}
public static <T> T getBean(Class<T> beanClass) {
return applicationContext.getBean(beanClass);
}
// 다양한 다른 유틸리티 메서드들을 추가할 수 있습니다.
}
위의 예제에서 SpringContextHolder는 ApplicationCotnextAware 인터페이스를 구현하고,
스프링 컨테이너에서 ApplicationContext를 주입받습니다.
SecurityContextHolder는 Spring Security의 핵심 구성 요소로,
현재 실행 중인 스레드에 대한 보안 컨텍스트 정보를 저장하고 추출할 수 있는 메커니즘을 제공합니다.
보안 컨텍스트에는 현재 인증된 사용자에 대한 인증 객체 및 권한 정보(사용자 아이디, 유저 이름, 비밀번호 등)가 포함됩니다.
SecurityContextHolder 주요기능
- 보안 컨텍스트 저장 : 현재 스레드에 대한 보안 컨텍스트 정보를 저장하여, 애플리케이션 내 어디에서나 해당 정보에 쉽게 접근할 수 있습니다.
- 보안 정보 검색 : 쉽게 현재 인증된 사용자의 인증 객체 및 권한 정보를 검색할 수 있도록 메소드를 제공합니다. 이를 통해 사용자으 ㅣ권한을 확인하거나 인증 여부를 확정할 수 있습니다.
반응형
'Spring' 카테고리의 다른 글
Spring Security | WebSecurity, HttpSecurity 두가지 주요 클래스에 대하여. (0) | 2024.03.13 |
---|---|
Spring Security | AuthenticationEntryPoint 인터페이스 설명 및 BasicAuthenticationEntryPoint 구현체 설명 (0) | 2024.03.13 |
Spring Security | 핵심 메소드와 기능 설명 (0) | 2024.03.11 |
SpringBoot | ResponseEntity란? (0) | 2024.03.11 |