Security 설정 etc...

김준영·2023년 5월 16일
1

Code States

목록 보기
22/33

headers().frameOptions.sameOrigin()

H2 웹 콘솔의 화면 자체가 내부적으로 태그를 사용하고 있기 때문에 개발 환경에서는 H2 웹 콘솔을 정상적으로 사용할 수 있도록 frameOptions().sameOrigin()을 추가했다.

.frameOptions().sameOrigin()을 호출하면 동일 출처로부터 들어오는 request만 페이지 렌더링을 허용합니다.

cors(withDefaults())

corsConfigurationSource라는 이름으로 등록된 Bean을 이용합니다.

CORS를 처리하기 가장 쉬운 방법은 CorsFilter를 사용하는 것인데 CorsConfigurationSource Bean을 제공함으로써 CorsFilter를 적용할 수 있습니다.

💡 CORS(Cross-Origin Resource Sharing)
애플리케이션 간에 출처(Origin)가 다를 경우 스크립트 기반의 HTTP 통신(XMLHttpRequest, Fetch API)을 통한 리소스 접근이 제한되는데, CORS는 출처가 다른 스크립트 기반 HTTP 통신을 하더라도 선택적으로 리소스에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 정책입니다.

httpBasic()

request를 전송할 때마다 Username/Password 정보를 HTTP Header에 실어서 인증을 하는 방식이다.

💡 폼 로그인과 HTTP Basic 인증을 disable하면 해당 인증과 관련된 Security Filter(UsernamePasswordAuthenticationFilter, BasicAuthenticationFilter 등)가 비활성화된다는 사실을 참고하기 바랍니다.

CorsConfigurationSource

	@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()

.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)를 통해서 세션을 생성하지 않도록 설정합니다.

SessionCreationPolicy의 설정값으로는 아래와 같이 총 네 개의 값을 사용할 수 있습니다.

SessionCreationPolicy.ALWAYS

항상 세션을 생성합니다.
SessionCreationPolicy.NEVER

세션을 생성하지 않지만 만약에 이미 생성된 세션이 있다면 사용합니다.
SessionCreationPolicy.IF_REQUIRED

필요한 경우에만 세션을 생성합니다.
SessionCreationPolicy.STATELESS

세션을 생성하지 않으며, SecurityContext 정보를 얻기 위해 결코 세션을 사용하지 않습니다.

profile
ㅎㅎ

0개의 댓글