H2 웹 콘솔의 화면 자체가 내부적으로 태그를 사용하고 있기 때문에 개발 환경에서는 H2 웹 콘솔을 정상적으로 사용할 수 있도록 frameOptions().sameOrigin()을 추가했다.
.frameOptions().sameOrigin()을 호출하면 동일 출처로부터 들어오는 request만 페이지 렌더링을 허용합니다.
corsConfigurationSource라는 이름으로 등록된 Bean을 이용합니다.
CORS를 처리하기 가장 쉬운 방법은 CorsFilter를 사용하는 것인데 CorsConfigurationSource Bean을 제공함으로써 CorsFilter를 적용할 수 있습니다.
💡 CORS(Cross-Origin Resource Sharing)
애플리케이션 간에 출처(Origin)가 다를 경우 스크립트 기반의 HTTP 통신(XMLHttpRequest, Fetch API)을 통한 리소스 접근이 제한되는데, CORS는 출처가 다른 스크립트 기반 HTTP 통신을 하더라도 선택적으로 리소스에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 정책입니다.
request를 전송할 때마다 Username/Password 정보를 HTTP Header에 실어서 인증을 하는 방식이다.
💡 폼 로그인과 HTTP Basic 인증을 disable하면 해당 인증과 관련된 Security Filter(UsernamePasswordAuthenticationFilter, BasicAuthenticationFilter 등)가 비활성화된다는 사실을 참고하기 바랍니다.
@Bean
CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(Arrays.asList("*"));
configuration.setAllowedMethods(Arrays.asList("GET", "POST", "PATCH", "DELETE"));
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return (CorsConfigurationSource) source;
}
setAllowedOrigins()를 통해 모든 출처(Origin)에 대해 스크립트 기반의 HTTP 통신을 허용하도록 설정합니다.
setAllowedMethods()를 통해 파라미터로 지정한 HTTP Method에 대한 HTTP 통신을 허용합니다.
CorsConfigurationSource 인터페이스의 구현 클래스인 UrlBasedCorsConfigurationSource 클래스의 객체를 생성합니다.
source.registerCorsConfiguration("/**", configuration);
모든 URL에 앞에서 구성한 CORS 정책(CorsConfiguration)을 적용합니다.
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)를 통해서 세션을 생성하지 않도록 설정합니다.
SessionCreationPolicy의 설정값으로는 아래와 같이 총 네 개의 값을 사용할 수 있습니다.
SessionCreationPolicy.ALWAYS
항상 세션을 생성합니다.
SessionCreationPolicy.NEVER
세션을 생성하지 않지만 만약에 이미 생성된 세션이 있다면 사용합니다.
SessionCreationPolicy.IF_REQUIRED
필요한 경우에만 세션을 생성합니다.
SessionCreationPolicy.STATELESS
세션을 생성하지 않으며, SecurityContext 정보를 얻기 위해 결코 세션을 사용하지 않습니다.