-
SpringSecurity 흐름BackEnd/SpringSecurity 2023. 7. 3. 00:39
1. 스프링부트 스펙
스프링부트 버전 : 2.7.13
자바 버전 : 11 (최신버전의 스프링부트는 자바 17로 설정)
의존성 3가지 : 1. 스프링 웹 (내장 톰캣) 2. 스프링 시큐리티 3. 롬복
dependencies { implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.security:spring-security-test' }
스프링 시큐리티에 대해서는 이전에 인프런 시큐리티강의를 듣고 오래 사용하지않다 보니 부분적으로만 기억이 났다
스프링 시큐리티의 큰 흐름만 이해하고 디버깅하면 이후 사용에서 부담은 줄어들것같다
2. 스프링 시큐리티 주요 흐름
스프링 시큐리티의 흐름은 크게 3가지 클래스를 통해서 흐름을 파악 할 수있다
주요 클래스 : 1. SecurityBuilder.java 2. WebSecurity.java 3. HttpSecurity.java
SecurityBuilder.java의 구현체 : WebSecurity.java, HttpSecurity.java
1. WebSecurity.java
클래스의 주 목적 : FilterChainProxy 생성
공식문서 정의 : FilterChainProxy?
요약 설명 : FilterChainProxy는 기존에 생성해놓은 SecurityFilterChain를 하나 혹은 여러개를 포함하고 있다
초기화 메서드 : WebSecurity.performBuild()
실제 요청시 진행되는 필터 과정 :
1. 클라이언트 요청
2. 톰캣
3. DelegatingFilterProxy
(servlet container가 요청을 받지만 톰캣은 스프링의 핵심 기술사용이 불가능함으로 spring이 사용이 가능하도록 하기 위해서 해당 클래스로 위임)
4. FilterChainProxy를 통해서 필터작업 진행
DelegatingFilterProxy -> FilterChainProxy 위임
2. HttpSecurity.java
클래스의 주 목적 : SecurityFilterChain 생성
공식문서 정의 : SecurityFilterChain?
요약 설명 : 현재 요청에 해당하는 SpringSecurityFilter를 결정한다. SecurityFilterChain는 하나 혹은 여러개 존재할 수 있다
SecurityFilterChain안에 CsrfFilter, UsernamePasswordAuthenticationFIlter등 필터들을 사용할 수 있고 사용자가 커스텀하여 변경 할 수 있는 부분이다. SecurityFilterChain안에는 HttpSecurity로 정의한 필터 목록들이 존재한다
프로토타입은 싱글턴과 다르게 하나의 객체를 여러곳에서 사용하는 것이 아닌 매번 새로운 객체를 생성하게된다
3. SecurityConfig.java
클래스의 주 목적 : 사용자 정의 SecurityFilterChain 생성
SecurityFilterChain커스텀하는경우 기본 스프링부트 시큐리티 SecurityFilterChain 초기화를 진행하지않는다
초기화 작업 : init() - 초기화시 출력하는부분 확인 가능
설정 작업 : configure() 클라이언트 요청시 매번 확인 가능
'BackEnd > SpringSecurity' 카테고리의 다른 글
KeyCloak으로 Oauth2.0 인가서버 구현 - 2 (0) 2023.07.08 KeyCloak으로 Oauth2.0 인가서버 구현 - 1 (0) 2023.07.08 Oauth2.0 기본 개념 (0) 2023.07.06 CORS 기본 개념 (0) 2023.07.06