import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public BCryptPasswordEncoder bCryptPasswordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
//csrf disable
http
.csrf((auth) -> auth.disable());
//Form 로그인 방식 disable
http
.formLogin((auth) -> auth.disable());
//http basic 인증 방식 disable
http
.httpBasic(auth -> auth.disable());
//경로별 인가 작업
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/login", "/" , "/join").permitAll()
.requestMatchers("/admin").hasRole("ADMIN")
.anyRequest().authenticated());
//세션 설정
http
.sessionManagement(sesstion -> sesstion
.sessionCreationPolicy(SessionCreationPolicy.STATELESS));
return http.build();
}
}
@Configuration
어노테이션은 이 클래스가 스프링 설정 클래스임을 나타냅니다.
@EnableWebSecurity
어노테이션은 스프링 시큐리티를 활성화하는 역할을 합니다.
BCryptPasswordEncoder
빈을 생성하는 메서드입니다. 이 빈은 비밀번호를 암호화하는데 사용합니다.
SecurityFilterChain
빈을 생성하는 메서드입니다. 이 빈은 보안 필더 체인을 구성합니다.
csrf
를 비활성화 합니다.CSRF
Cross-Site Request Forgery
웹사이트 취약점 공격 기법. 이 공격은 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹사이트에 요청하게 하는 것이다.
CSRF
공격을 방지하기 위한 조치입니다. CSRF 공격을 비활성화하면 해당 공격에 취약하지 않도록 보호할 수 있다.
(클라이언트 기반 인증 방식을 사용하는 경우에는 CSRF를 비활성화 할 수 있다.)CSRF 정의와 XSS와 차이
https://panda-university.tistory.com/19