WebSecurityConfiguration:
。Spring Security의웹 보안에설정을 담당하는@Configuration Class
。Authentication,Authorization,CSRF Protection등의 보안정책을 설정한SecurityFilterChain 객체를@Bean method를 통해Spring Bean으로 등록
SpringBootWebSecurityConfiguration
。Servlet 어플리케이션을 보호하는 역할의WebSecurityConfiguration Class
▶ 웹보안을 위한 Default로 설정된Configuration Class.
。Spring은 기본적으로FilterChain을 통해 명시적으로 인증된HTTP Request에 대해서만 허용 및formLogin()과httpBasic()이 기본적으로 활성화 설정되도록 설정됨.
▶CsrfFilter도 기본적으로 활성화 설정이 되어있음.
WebSecurityConfigurationClass 설정@Configuration @EnableWebSecurity @EnableMethodSecurity(prePostEnabled = true) @RequiredArgsConstructor public class SecurityConfiguration { // 커스텀한 필터구현체를 의존성주입 private final JwtFilter jwtFilter; // 메서드를 허용할 API 엔드포인트 지정 private static final String[] GET_PERMIT_ALL = {"/api/health/**", "/swagger-ui/**", "/v3/api-docs/**"}; private static final String[] POST_PERMIT_ALL = {"/members", "/auth/login"}; private static final String[] PUT_PERMIT_ALL = {"/api/v1/public/**"}; private static final String[] PATCH_PERMIT_ALL = {"/api/v1/public/**"}; private static final String[] DELETE_PERMIT_ALL = {"/api/v1/public/**"}; // BCrypt hashing 알고리즘을 사용하는 패스워드 인코더를 // Spring Bean으로 등록 @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } // AuthentificationManager를 Spring Bean으로 등록 // 사용자가 전달한 인증방식에 맞는 검증방식의 AutheticationProvider를 // 식별하여 검증을 수행 @Bean public AuthenticationManager authenticationManagerBean(AuthenticationConfiguration authenticationConfiguration) throws Exception { return authenticationConfiguration.getAuthenticationManager(); } // @EnableWebSecurity를 통해 사용할 Spring Security Filter Chain 설정 // JWT 사용 기준 @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { return http .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) // 세션을 사용하지 않도록 설정 .authorizeHttpRequests( request -> { // 요청에서 허용할 메서드 당 API 엔드포인트 범위 지정 // "/api/v1/public/**" URL로 요청하는 HTTP GET REQUEST를 모두 허용 request.requestMatchers(HttpMethod.GET, GET_PERMIT_ALL).permitAll(); request.requestMatchers(HttpMethod.POST, POST_PERMIT_ALL).permitAll(); request.requestMatchers(HttpMethod.PATCH, PATCH_PERMIT_ALL).permitAll(); request.requestMatchers(HttpMethod.PUT, PUT_PERMIT_ALL).permitAll(); request.requestMatchers(HttpMethod.DELETE, DELETE_PERMIT_ALL).permitAll(); } // 위 설정범위에 들어가지 않는 메서드에 대해서는 인증이 필요하도록 설정 ).authorizeHttpRequests(request->request.anyRequest().authenticated()) .csrf(AbstractHttpConfigurer::disable) // 커스텀한 JWT 검증용도의 Filter를 Spring Security Filter Chain에 포함 // UsernamePasswordAuthenticationFilter가 동작하기 전에 작동할 필터로 설정 .addFilterBefore(jwtFilter, UsernamePasswordAuthenticationFilter.class) .build(); } }。
WebSecurityConfiguration을 담당하는@Configuration Class내BCryptPasswordEncoder객체를 생성하여PasswordEncoder type으로Spring Bean으로 등록하는@Bean Method를 정의.
▶ 추후계정저장 시 해당Password Encoder를 통해단방향 암호화되어 저장되어복호화불가능.
。AuthentificationManager를Spring Bean으로 등록하는@Bean method정의
.addFilterBefore(jwtFilter, UsernamePasswordAuthenticationFilter.class)
。사용자가JWT 토큰을서버에 전달 시JWT 검증용도로 구축한커스텀 Filter 구현체를Spring Security Filter Chain에 포함 JWT 검증 필터
▶UsernamePasswordAuthenticationFilter가 동작하기전에 동작하도록 설정
@EnableWebSecurity
。Spring Secuirty을 활성화 및웹보안 설정을 구성하는 용도로 사용되는어노테이션
▶Spring Security를 설정 및 구성하는@Configuration Class에 선언
。WebSecurityConfiguration역할의@Configuration Class내Spring Bean으로 등록된SecurityFilterChain을 활성화
。spring-boot-starter-security 의존성추가 시 별도의어노테이션선언 없어도 자동 활성화
@EnableWebFluxSecurity
。Tomcat이 아닌Netty기반의비동기서버환경에서 선언하는어노테이션