스프링 Security 필터 체인?

Rae-eun Yang·2024년 7월 13일
0

필터체인이 무엇일까?
우리가 서버에 요청을 보낼때, 스프링 세큐리티는 이 요청을 가로챈 후, 필터링을 한다
그 필터링 단계를 필터체인이라고 일컫는듯하다

[필터체인 단계]
1. 모든 요청은 인증되어야 한다
2. 인증되지 않은 요청은 로그인 페이지를 띄운다
3. CSRF 확인한다 -> POST, PUT 요청에 영향을 준다 (무슨 말인지,, 무슨 영향인지는 정확히 모름)

그 외에도 많은 단계가 존재한다.

여튼.. 필터체인을 커스터마이징해서 보안 쪽을 유하게 만들수도, 꽉 잡도록 만들수도 있는듯 하다
방법은 필터체인을 오버라이딩하는 객체를 만들어 사용하면 된다

[우리가 커스터마이징 할 것들]
1. localhost:8080/users에 POST 요청을 보냈을때, 로그인 창이 나오는 것이 아닌, 사용자의 자격 증명을 요구하는 알림창 띄우기
2. CSRF를 해제해서 POST 요청 보낼 수 있도록 하기!

기존의 필터체인을 오버라이딩하려면, 필터체인 자체를 재정의해야 한다고 한다.

그래서! 필터체인 객체(Bean)를 만들고, 필터체인 단계들을 하나하나 개발해보겠다

@Configuration
public class SpringSecurityConfiguration throws Exception {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) {
        // 필터 체인 정의 부분
        return http.build();
    }
}

SpringSecurityConfiguration 클래스를 만들고 Bean을 재정의할 수 있도록 @Configuration 어노테이션을 붙여준다.
그 후, SecurityFilterChain을 반환하는 filterChain 메소드를 생성한다.

@Configuration
public class SpringSecurityConfiguration {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception{
        // 필터 체인 정의 부분
        // 1. 모든 요청은 인증되어야 한다.
        http.authorizeHttpRequests(
                auth -> auth.anyRequest().authenticated()
        );

        // 2. 만약 인증되지 않았다면, 웹 페이지를 보여준다. -> 팝업창을 보여주는 것으로 재정의
        http.httpBasic(withDefaults());

        // 3. POST, PUT 요청에 영향을 주는 CSRF를 해제한다.
        http.csrf().disable();

        return http.build();
    }
}

그 안에 스프링 Security 필터 체인 단계들을 원하는 방향으로 재정의하는 코드들을 작성해주었다.

그렇게 되면 어떠한 요청을 보냈을때, 자격 증명을 요구하는 웹 페이지를 띄우지 않고 다음과 같은 팝업창이 뜬다.

profile
ContentsDev Manager

0개의 댓글