spring/spring security

Spring Security의 기본개념 공부 2.

대기업 가고 싶은 공돌이 2024. 3. 24. 20:40

Section 2.

Spring Security의 기본 설정

  • 기본적으로 스프링 시큐리티는 모든 URL을 보호한다.
  • SpringBootWebSecurityConfiguration 클래스를 살펴보자
@Bean
@Order(2147483642)
SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception {
http.authorizeHttpRequests((requests) -> {
((AuthorizeHttpRequestsConfigurer.AuthorizedUrl)requests.anyRequest()).authenticated();
});
http.formLogin(Customizer.withDefaults());
http.httpBasic(Customizer.withDefaults());
return (SecurityFilterChain)http.build();
}
  • 내부에 defaultSecurityFilterChain 메소드가 존재하는데
((AuthorizeHttpRequestsConfigurer.AuthorizedUrl)requests.anyRequest()).authenticated();
});
  • 이와 같이 모든 요청에 인증을 요구하는 것을 볼 수 있다.
        http.formLogin(Customizer.withDefaults());
      http.httpBasic(Customizer.withDefaults());
  • 이 부분에서는 form 형식을 통한 로그인과 http 헤더에 아이디와 비밀번호를 붙여서 보내는 방식의 로그인이 이뤄진다는 것을 알수있다.
        return (SecurityFilterChain)http.build();
  • 마지막 return 부분엔 http.build()가 들어가있고 이를 SecurityFilterChain객체로 반환하는 것을 볼 수 있다.
  • 만약 개발자가 자체적인 SecurityFilterChain 메소드를 정의한다면 defaultSecurityFilterChain은 동작하지 않는다고 한다.
    • 즉 새롭게 SecurityFilterChain을 정의해야 우리 마음대로 URL을 제어할 수 있는 것이다. 그럼 우리의 요구사항에 맞게 새로운 Bean을 등록해보겠다.
  • 맞춤형 요구사항을 정의할 때는 requestMatchers라는 메소드를 호출해야한다.
    • 이 메소드는 API 경로를 무제한으로 받아들인다.
    • URL을 정의했고 그 URL을 보호하고 싶다면 뒤에 authenticated() 메소드를 호출하면 되고
    • 보호하고 싶지 않다면 permit.All() 메소드를 호출하면 된다.
http.authorizeHttpRequests((requests) -> requests.
  requestMatchers("/myAccount","/myBalance","/myLoans","/myCards").authenticated()
  .requestMatchers("/notices","/contact").permitAll())
  .formLogin(Customizer.withDefaults())
  .httpBasic(Customizer.withDefaults());
  • 다음과 같이 코드를 수정하였고 .authenticated가 붙은 곳은 로그인창으로 연결되고, permitAll이 붙은 곳은 바로 연결이 되는 것을 확인할 수 있다.

웹으로 오는 모든 요청을 거부하는 방법

  • requests.anyRequest().denyAll()) 이 코드와 같이 anyRequest()뒤에 denyAll만 붙여주면 모든 요청이 거부된다.
  • 반대로 모든 요청을 허용하려면 .permitAll()을 붙여주면 된다.