프로그래밍/Spring Boot

[Security] Authentication Filter에 대하여 살펴보기

연유뿌린빙수 2024. 12. 27. 23:04

요청과 응답에 대한 HttpSecurity 객체에 대하여 필터를 설정하여 인증 및 인가 설정을 한다.

 

전반적인 흐름

1. AuthenticationFilter를 구현하여, 메소드를 통하여 인증과 인증이 필요없는 경로 등을 설정한다.

2. Authentication 에러에 대하여 (인증 실패) 처리할 AuthenticationEntryPoint 클래스를 구현한다.

 

 

 

 

Spring Security 기능을 사용하기 위하여 일반적으로 SecurityConfig로 Configuration을 설정한다.

클라이언트가 요청을 하면, 필터들을 통하여 서버에 도착하게 된다.

이 때의 필터를 Configuration에 저장한다.

 

예시 코드

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
	Filter delegate = getFilterBean(someBeanName);
	delegate.doFilter(request, response);
}

 

1. 사용자의 요청이 서버로 들어옵니다.

2. Authotication Filter가 요청을 가로채고 Authotication Manger로 요청을 위임합니다.

3. Authotication Manager는 등록된 Authotication Provider를 조회하며 인증을 요구합니다. 

4. Authotication Provider가 실제 데이터를 조회하여 UserDetails 결과를 돌려줍니다.

5. 결과는 SecurityContextHolder에 저장이 되어 저장된 유저정보를 Spring Controller에서 사용할 수 있게 됩니다.

 

 

FilterChain

 

 

 

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .csrf(Customizer.withDefaults())
            .httpBasic(Customizer.withDefaults())
            .formLogin(Customizer.withDefaults())
            .authorizeHttpRequests(authorize -> authorize
                .anyRequest().authenticated()
            );

        return http.build();
    }

}

 

 

 

 

주의할 점!!

WebSecurityConfig는 웹에 대한 접근에 관련된 설정이고,

전반적인 Filter에 대한 SecurityConfig는 별개이다!

 


REF

https://velog.io/@u-nij/JWT-JWT-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0-3-JwtAuthenticationFilter-JwtAccessDeniedHandler-JwtAuthenticationEntryPoint