Spring Security 적용하기

Nicky·2024년 2월 16일
0
post-thumbnail

이번 포스팅은 Security 적용을 위한 세팅과 클래스들을 작성하는 시간을 가지도록 하겠다.

1. 의존성 추가

// Security
implementation 'org.springframework.boot:spring-boot-starter-security'

(버전 3.2.2)

2. SecurityConfig

@EnableWebSecurity 어노테이션을 사용하여 스프링 시큐리티의 보안 구성을 활성화할 수 있다.

@Configuration
@EnableWebSecurity
public class SecurityConfig {

}

지금부터 SpringSecurity에 등록되는 빈들에 대해 알아보자.

SecurityFilterChain

우선 이전 포스팅에서 다뤘듯이 스프링의 보안 체계는 필터체인을 구성하면서 완성된다.

나의 경우 stateless 방식의 JWT 로그인을 구현할 것이므로 다음과 같이 구성하였다.

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
                // jwt 토큰 사용
                .csrf(AbstractHttpConfigurer::disable)
                .formLogin(AbstractHttpConfigurer::disable)
                .httpBasic(AbstractHttpConfigurer::disable)
                .sessionManagement(AbstractHttpConfigurer::disable)
                .and()
                .authorizeHttpRequests((authz) -> authz
                        // 회원 가입
                        .requestMatchers(antMatcher(HttpMethod.POST, "/api/users")).permitAll()
                        .anyRequest().authenticated()
                );
        return http.build();
    }
  • CSRF(크로스 사이트 요청 위조) 보호 기능, 폼 기반 로그인, HTTP 기본 인증, 세션 관리 비활성화

    .csrf(AbstractHttpConfigurer::disable)
    .formLogin(AbstractHttpConfigurer::disable)
    .httpBasic(AbstractHttpConfigurer::disable)
    .sessionManagement(AbstractHttpConfigurer::disable)

  • 회원가입 요청에 대해서는 필터 제외.

    .authorizeHttpRequests((authz) -> authz
    // 회원 가입
    .requestMatchers(antMatcher(HttpMethod.POST, "/api/users")).permitAll()
    .anyRequest().authenticated()
    );

AuthenticationManager

Authentication 객체를 매개변수로 받아 처리하고, 인증이 성공적으로 완료되면 인증된 Authentication 객체를 반환하는 메서드이다. 자세한 내용은 인증 로직 구현시 다루겠다.

    @Bean
    public AuthenticationManager authenticationManager(
            AuthenticationConfiguration authenticationConfiguration) throws Exception {
        return authenticationConfiguration.getAuthenticationManager();
    }

PasswordEncoder

회원가입시 비밀번호를 인코딩을 해줄 메서드이다.

    // 비밀번호 인코더
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

SecurityConfig를 등록하게 되면 Security 적용이 완료된다. 이제 인증되지 않은 API 요청이 있을시 인증 에러를 반환할 것이다!

profile
코딩 연구소

0개의 댓글

관련 채용 정보