SpringBoot Security ≒ 클럽 입구컷
SpringBoot Security 는 기본적으로 인증이 필요한 엔트포인트를 구분하지 않고
모든 곳에서 인증하도록 로그인 페이지가 redirect된다.
아이디 = user
비번 = 콘솔창에 Using generated security password: ~~~ 으로 표시됨
페이지 내 우클릭 > 검사 > application > 쿠키 > 주소 > JESSIONID 삭제
REST API는 상태가 없는 구조이므로 서버가 클라이언트의 상태나 세션 정보를 기억하지 않는다. 대신 클라이언트는 매 요청마다 명시적으로 인증 정보를 포함시켜야 한다. 이 방식은 브라우저의 쿠키를 자동으로 포함시키는 CSRF 공격 방식과 다르기 때문에 CSRF 공격에 취약하지 않다. 따라서 REST API에서는 CSRF를 비활성화해도 문제가 되지 않는다.
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain baseSecurityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(authorizeRequests ->
authorizeRequests
.requestMatchers("/h2-console/**")
.permitAll()
.requestMatchers("/h2-console/login.do") // 상위룰 우선이기 때문에, 의미 없음
.authenticated() // 상위룰 우선이기 때문에, 의미 없음
.requestMatchers(HttpMethod.GET, "/api/*/posts/{id:\\d+}", "/api/*/posts", "/api/*/posts/{postId:\\d+}/comments")
.permitAll()
.anyRequest()
.authenticated()
)
/h2-console/login.do"는 상위룰에 의해 실행되지 않는다.
둘의 순서를 바꾸면 실행된다.