package com.example.springboot.User.Config;

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.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@Configuration // 이 어노테이션을 달면 빈 설정 담당 클래스가 됨
@EnableWebSecurity // 이 어노테이션을 달면 Security 를 활성화
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Bean // 개발자가 직접 제어 불가능한 외부 라이브러리 등을 Bean으로 만들 때 사용
public  PasswordEncoder getPasswordEncoder() {
return new BCryptPasswordEncoder(); // 비밀번호를 암호화 할 수 있는 메소드를 가진 클래스
    }

    @Override // 해당 메소드가 부모 클래스에 있는 메서드를 Override 했다는 것을 명시적으로 선언 -> 어떤 메소드가 오버라이딩 됐는지 쉽게 파악 가능
protected void configure(HttpSecurity http) throws Exception {
// 같은 패키지나 자식 클래스만 접근 = protected 
	        http
				        .cors().and() 
                .csrf().disable()
                .formLogin().disable()

             .sessionManagement()
						 .sessionCreationPolicy(SessionCreationPolicy.STATELESS)

                .and()
                .authorizeRequests() 

                .antMatchers("/**").permitAll()

                .anyRequest().authenticated();
    }
}

스프링 시큐리티란 ?

CORS(Cross Origin Resoure Sharing) ?

CSRF 란 ?

Rest api 에서의 CSRF

Form login 이란 ?

@Configuration