Spring Security
1. Spring Security
오픈소스 프레임웍으로 보편적인 인증, 인가 , ui처리에 대한 기본 구현을 제공하고 있으며
일부 변경할 수 있게 확장이 가능하여 프로그래머는 처음부터 인증과 권한을 위한 코드를
만들기 보다는 스프링시큐리티가 제공하는 틀을 재사용하고 필요한 부분만 커스텀마이징
함 으로써 보다 빠르게 인증과 권한 부분을 구현 할수 있음
암호화 기능도 제공하여 암호화 기능에 대한 특별한 제약이 없다면 스프링 시큐리티가 제공하는 암호화 기능을 사용할수도 있음
2.DelegatingFilterProxy
--외부에서 HTTP 요청이 들어오면, 톰캣과 같은 서블릿 컨테이너가 먼저 받습니다.
하지만 서블릿 컨테이너 안에 있는 표준 필터들은 스프링이 관리하는 객체(빈, Bean)를 전혀 모릅니다.
그래서 DB 접근이나 의존성 주입(DI) 같은 스프링의 강력한 기능을 사용하는 보안 검사를 직접 할 수가 없습니다.
--그래서서 서블릿 컨테이너의 표준 필터 체인 안에 DelegatingFilterProxy라는 특별한 대리인 필터를 등록
--요청이 DelegatingFilterProxy에 도달하면 스프링 컨테이너로 요청을 넘기며 이때
스프링 컨테이너에서 FilterChainProxy라는 이름의 스프링 빈을 찾아 요청을 위임(Delegate)합니다.
--FilterChainProxy는 스프링의 모든 기능을 활용할 수 있는 스프링 시큐리티 필터 체인을 통해
인증(Authentication)과 인가(Authorization) 등 정교한 보안 처리를 진행
-- 진행과정 : Http 요청 -> 서블릿 컨테이너 -> DelegatingFilterProxy -> 스프링 컨테이너 -> FilterChainProxy -> 스프링 시큐리티 필터 체인 -> 인증, 인가 처리 진행
3. @EnableWebSecurity
스프링 시큐리티(Spring Security) 프레임워크에서 제공하는 어노테이션(Annotation)이며 @Configuration 어노테이션이 붙은 스프링 설정 클래스 위에 함께 사용됨.
기능은 애플리케이션에 스프링 시큐리티의 웹 기반 보안 기능을 활성화하는 것
3-1. 인프라 구축: 웹 애플리케이션의 보안을 담당할 핵심 빈(Bean)들을 스프링 컨테이너에 자동으로 등록합니다.
위의 FilterChainProxy 를 스프링 빈으로 등록하여 가동합니다.
3-2. 커스터마이징 허용: 개발자가 동일한 설정 클래스 안에서 SecurityFilterChain이라는 또 다른 빈(Bean)을 정의하여,
URL별 접근 권한이나 로그인/로그아웃 페이지 등 나만의 구체적인 보안 규칙을 스프링에게 전달할 수 있도록 해줍니다.
예)
@Configuration // 이 클래스는 스프링의 설정 클래스입니다.
@EnableWebSecurity // 1. 핵심 스위치! 이 애플리케이션의 웹 보안 기능을 활성화합니다.
public class SecurityConfig {
@Bean // 2. 내가 정의한 '나만의 보안 규칙'을 스프링에게 알려주는 빈입니다.
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
..........
}
}
댓글
댓글이 없습니다.
