MVC path를 보호하는 방법에 대한 정리 내용이다.
기본적으로 Spring Security를 적용하면 모든 인증되지 않는 모든 요청에 대한 접근을 거부한다. 해당 기본 설정은 SpringBootWebSecurityConfiguration에서 확인할 수 있다.
defaultSecurityFilterChain

위 메소드가 접근에 대한 보호 기능을 수행하는 메소드이다.
HttpSecurity 객체를 입력으로 받고, 메소드의 첫 번째 줄은 해당 객체에서 모든 요청에 대해 인증된 요청만 허락하도록 세팅되어있다.
두 번째 줄과 세 번째 줄은 인증 형식으로, formLogin과 httpBasic 두 형식을 사용한다.
아래는 해당 메소드에 대한 설명이다. web security의 default configuration으로, 사용자가 SecurityFilterChain bean을 정의하면, 해당 메서드가 back-off 된다고 설명되어있다. 즉, SecurityFilerChain을 반환하는 bean을 사용자가 직접 정의하면 해당 메서드를 덮어쓸 수 있다. 이를 통해 서비스에 맞는 인증 방식을 구성할 수 있다.

SecurityConfig.java
아래는 직접 구성한 config 파일이다. @Configuration과 @Bean으로 해당 클래스를 빈으로 등록해야 한다.

람다식으로 어떤 요청에 대해 어떤 식의 행동을 할지 정할 수 있다.
anyRequest는 모든 요청에 대해 적용한다는 뜻이고, 특정 URI에 대한 요청만 정하고 싶으면 anyRequest 대신 requestMatchers를 사용하면 된다.
요청에 대해 총 3가지 방식 permitAll(), denyAll(), authenticated()를 선택하여 적용할 수 있는데,
permitAll()은 인증 여부와 상관없이 항상 허용한다는 뜻,
denyAll()은 인증 여부와 상관없이 항상 거부한다는 뜻,
authenticated()는 인증된 사용자에게만 허용한다는 뜻이다.
아래 formLogin과 httpBasic은 인증 방식으로, 로그인 방식으로 생각하면 된다. 백엔드 서버를 개발하는 경우 로그인은 프론트엔드를 통해 진행되는 경우가 많으므로 해당 기능은 disable해도 무방하다.
disable하고 싶을 때는 아래와 같이 람다식을 이용한다. ( .disable() 방식은 deprecated 되어있음)
