내배캠 주요 학습/Spring 숙련
Spring Secutiry
chaeyoung-
2023. 6. 20. 01:33
Spring Security가 Filter 기반으로 동작을 함.
Security가 Session 방식으로 동작을 하는 것을 알아야 함.
그러므로 이전 강의에 만들어놓은 Filter 클래스의 @Component 코드 주석 처리
Filter 관련 참조 글 :
2023.06.20 - [분류 전체보기] - Filter
전체 코드 :
package com.sparta.springauth.config;
import org.springframework.boot.autoconfigure.security.servlet.PathRequest;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
@EnableWebSecurity // Spring Security 지원을 가능하게 함
public class WebSecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
// CSRF 설정
http.csrf((csrf) -> csrf.disable());
http.authorizeHttpRequests((authorizeHttpRequests) ->
authorizeHttpRequests
.requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll() // resources 접근 허용 설정
.anyRequest().authenticated() // 그 외 모든 요청 인증처리
);
// 로그인 사용
http.formLogin(Customizer.withDefaults());
return http.build();
}
}
코드 분석:
@Configuration
@EnableWebSecurity // Spring Security 지원을 가능하게 함
public class WebSecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { }
}
@EnableWebSecurity
해당 어노테이션을 기재해야 Spring Security 활용 가능.
@Configuration
클래스 내에 메서드를 Bean으로 수동 등록할 때 활용.
메서드에 @Bean 어노테이션을 기재해서 해당 메서드를 Bean으로 수동 등록함.
해당 메서드에서 반환하여 반환된 객체가 Bean으로 등록이 된다.
위와 같은 예시는 SecurityFilterChain 타입의 Bean이 등록된다.
http.authorizeHttpRequests((authorizeHttpRequests) ->
authorizeHttpRequests
.requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll()
// resources 접근 허용 설정
.requestMatchers("/api/user/**").permitAll()
.anyRequest().authenticated() // 그 외 모든 요청 인증처리
);
.requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll()
[resources]로 들어오는 접근들에 대해서 permitAll한다. 허가하므로 인증 처리를 진행하지 않는다.
.requestMatchers("/api/user/**").permitAll()
/api/user/로 시작하는 어떤 요청들 모두 인증처리를 하지 않겠다.
.anyRequest().authenticated()
그외 모든 요청은 인증 처리를 한다.