ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    SecurityBuilder의 Build()를 하여 FilterChainProxy 생성

    클래스의 주 목적 : FilterChainProxy 생성

    공식문서 정의 : FilterChainProxy?

    요약 설명 : FilterChainProxy는 기존에 생성해놓은 SecurityFilterChain를 하나 혹은 여러개를 포함하고 있다

    초기화 메서드 : WebSecurity.performBuild()

     

    실제 요청시 진행되는 필터 과정 : 

    1. 클라이언트 요청

    2. 톰캣 

    3. DelegatingFilterProxy

    (servlet container 요청을 받지만 톰캣은 스프링의 핵심 기술사용이 불가능함으로 spring이 사용이 가능하도록 하기 위해서 해당 클래스로 위임)

    4. FilterChainProxy를 통해서 필터작업 진행

     

     

    DelegatingFilterProxy -> FilterChainProxy 위임

     

    AbstractSecurityWebApplicationInitializer.java를 디버깅시 FilterChainProxy(bean Name: springSecurityFilterChain)이 위임을 받음

     

    위임받은 FilterChainProxy에서 getFilter로 목록을 가져오고 virtualFilterChain로 차례대로 필터를 실행

    2. HttpSecurity.java

    SecurityBuilder의 Build()를 하여 SecurityFilterChain 생성

    클래스의 주 목적 : SecurityFilterChain 생성

    공식문서 정의 : SecurityFilterChain?

    요약 설명 : 현재 요청에 해당하는 SpringSecurityFilter를 결정한다. SecurityFilterChain는 하나 혹은 여러개 존재할 수 있다

    SecurityFilterChain안에 CsrfFilter, UsernamePasswordAuthenticationFIlter등 필터들을 사용할 수 있고 사용자가 커스텀하여 변경 할 수 있는 부분이다. SecurityFilterChain안에는 HttpSecurity로 정의한 필터 목록들이 존재한다

     

    별도의 시큐리티 설정을 하지않아도 http://localhost:8080 접속 시 시큐리티가 동작 하는 이유는 SpringBootWebSecurityConfiguration를 통해서 기본 설정이 되어있기 때문이다
    위에 SpringBootWebSecurityConfiguration.java의 defaultSecurityFilterChain메서드의 HttpSecurity클래스는 HttpSecurityConfiguration.java를 통해서 프로토타입으로 빈이 등록되어있다

     

    프로토타입은 싱글턴과 다르게 하나의 객체를 여러곳에서 사용하는 것이 아닌 매번 새로운 객체를 생성하게된다

     

    3. SecurityConfig.java

    클래스의 주 목적 : 사용자 정의 SecurityFilterChain 생성

    SecurityFilterChain커스텀하는경우 기본 스프링부트 시큐리티 SecurityFilterChain 초기화를 진행하지않는다

    SecurityFilterChain빈으로 등록한 후 Http를 원하는 방법으로 초기화 한다. http.apply()메서드를 통해 추가적으로 초기화 하고자하는 필터를 등록할 수 있다.
    위 apply에 추가한 추가 필터이다. AbstractHttpConfigurer를 상속받아<현재클래스, HttpSecurity>로 타입을 지정한다

    초기화 작업 : init() - 초기화시 출력하는부분 확인 가능

    설정 작업 : configure() 클라이언트 요청시 매번 확인 가능

     

    출처 : https://www.inflearn.com/course/%EC%A0%95%EC%88%98%EC%9B%90-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%8B%9C%ED%81%90%EB%A6%AC%ED%8B%B0

    '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

    댓글

Designed by Tistory.