자바기반의 웹 응용 프로그램 및 서비스에서 보안 관련 기능을 처리하기 위한 프레임 워크
웹 애플리케이션에서 사용자 인증 및 권한 부여와 같은 보안 관련 작업을 쉽게 처리할 수 있도록 도와준다.
CSRF란?
Cross Site Request Forgery로 사이트 간 위조 요청
공격자가 인증된 브라우저에 저장된 쿠키의 세션 정보를 활용하여 웹 서버에
사용자가 의도하지 않은 요청을 전달하는 것으로 정상적인 사용자가 의도치
않은 위조 요청을 보내는 것을 의미

1. 사용자가 로그인 정보로 로그인을 요청
2. AuthenticationFilter가 사용자 정보를 인터섹트하여 UsernamePasswordAuthenticationToken을 생성하여 AuthenticationManager에게 Authentication 객체를 전달
3. AuthenticationManager 인터페이스를 거쳐 AuthenticationProvider에게 (2)번의 정보를 전달, 등록된 AuthenticationProvider을 조회하여 인증을 요구
4. AuthenticationProvider는 UserDetailsService를 통해 입력받은 (3)의 사용자의 정보를 DB에 조회
5. AuthenticationManager는 Authentication 객체를 AuthenticationFilter로 전달
6. AuthenticationFilter는 전달받은 Authentication 객체를 LoginSuccessHandler로 전송하고, SecurityContextHolder에 담음
7. 성공 시 AuthenticationSuccessHandle, 실패 시 AuthenticationFailureHandle 실행
1) build.gradle 의존성
implementation 'org.springframework.boot:spring-boot-starter-security'
testImplementation 'org.springframework.security:spring-security-test'
2) config

WebSecurityConfigurerAdapter는 deprecated 되었기 때문에 FilterChain의 역할을 하는 메소드를 직접 구현하여 Bean으로 등록해 주어야 함.

참고자료