필터체인이 무엇일까?
우리가 서버에 요청을 보낼때, 스프링 세큐리티는 이 요청을 가로챈 후, 필터링을 한다
그 필터링 단계를 필터체인이라고 일컫는듯하다
[필터체인 단계]
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 필터 체인 단계들을 원하는 방향으로 재정의하는 코드들을 작성해주었다.
그렇게 되면 어떠한 요청을 보냈을때, 자격 증명을 요구하는 웹 페이지를 띄우지 않고 다음과 같은 팝업창이 뜬다.