728x90
프로젝트 생성



- 스프링 시큐리티 의존성만 추가하더라도, 기본적으로 User/Password를 제공이 된다.
SecurityBuilder / SecurityConfigurer

- SecurityBuilder는 빌더 클래스로, 웹 보안을 구성하는 빈 객체와 설정 클래스들을 생성하는 역할을 하며, WebSecurity와 HttpSecurity가 있다.
- SecurityConfigurer는 Http 요청과 관련된 보안 처리를 담당하는 필터들을 생성하고, 여러 초기화 설정에 관여한다.
- SecurityBuilder는 SecurityConfigurer를 포함하고 있으며, 인증 및 인가 초기화 작업은 SecurityConfigurer에 의해 진행된다.

- build() 메서드를 통해 빌더 클래스 생성
- 빌더 클래스를 생성하는 과정에서, SecurityConfigure에 있는 init, configure 메서드를 호출하면서, 설정 클래스를 생성한다.

- WebSecurity -> HttpSecurity 순서로 실행시키고, 초기 apply 함수를 실행시켜준다.
- apply 함수에서 초기화 대상임을 찾고, 초기화 대상 생성/적용 한다.
- build 메서드를 호출한다
- init, confugure 함수를 호출하면서, 인증과 인가에 필요한 필터를 생성한다
- WebSecurity의 대표적인 예로 WebSecurityConfigurerAdapter가 있으며 현재는 duplicate 된 상태이다.
- HttpSecurity에서는 build() 메서드를 호출하면, CorsConfigurer, HttpBaseConfigurer,... 등 필터들 모두 실행하면서, 인증/ 인가에 관한 모든 설정들이 초기화된다.
- performBuild()가 build() 내부적으로 실행이 되고, build() 메서드가 종료가 된다.
- WebSecurity에서는 performBuild() 호출하면서, FilterChainProxy를 생성한다.
- HttpSecurity에서는 performBuild() 호출하면서, SecurityFilterChain을 생성한다.
직접 CustomSecurityConfigurer 만들기
SecurityConfig
@EnableWebSecurity
public class SecurityConfig {
@Bean
SecurityFilterChain securityFilterChain(HttpSecurity http)
throws Exception { //빈이기 때문에 HttpSecurity를 주입 받을 수 있다
http.authorizeHttpRequests().anyRequest().authenticated();
http.formLogin();
http.apply(new CustomSecurityConfigurer().setFlag(false)); //빌더 패턴과 비슷하게 사용할 수 있다.
return http.build();
}
}
CustomSecurityConfiguer
public class CustomSecurityConfigurer extends
AbstractHttpConfigurer<CustomSecurityConfigurer, HttpSecurity> { //SecurityConfigurer 를 상속받고 있다.
private boolean isSecure;
@Override
public void init(HttpSecurity builder) throws Exception {
super.init(builder);
System.out.println("init method started...");
}
@Override
public void configure(HttpSecurity builder) throws Exception {
super.configure(builder);
System.out.println("configure method started...");
if (isSecure) {
System.out.println("https is required");
} else {
System.out.println("https is optional");
}
}
public CustomSecurityConfigurer setFlag(boolean isSecure) {
this.isSecure = isSecure;
return this;
}
}
- SecurityFilterChain 빈을 반환하는 securityFilterChain 빈을 생성한다.
- 예전에는 WebSecurityConfigurerAdapter를 호출하였는데 현재 더 이상 사용하지 않는다.
- 빈이므로, HttpSecurity객체를 파라미터로 받을 수 있으며, 해당 빈을 apply 메서드에 내가 생성한 빈을 넣어준다.
- CustomSecurityConfiguer에서 커스텀하게 설정을 진행할 수 있다.
- init 메서드를 오버라이드 하여, 실행되는지 print 하고, configure 메서드를 통해 build() 메서드가 호출되는 시점에서 동작할 기능을 커스텀하게 개발할 수 있다.
- builder 패턴처럼 쓰기 위해 setFlag 같은 경우 값을 변경 후, 자기 자신을 반환하도록 했다.
728x90
'스프링 시큐리티 OAuth2 > Spring Security Fundamentals' 카테고리의 다른 글
| CORS (0) | 2022.12.20 |
|---|---|
| HttpBasic 인증 (0) | 2022.12.18 |
| 시큐리티 인증 및 인가 흐름 요약 (0) | 2022.12.17 |
| AuthenticationEntryPoint 이해 (0) | 2022.12.17 |
| 자동 설정에 의한 초기화 진행 (0) | 2022.12.11 |