๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์˜ค๋ฅ˜ ํ•ด๊ฒฐ

Spring Security ์‚ฌ์šฉ์‹œ h2 ์›น ์ฝ˜์†” ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•

by syLim___ 2025. 3. 6.
728x90

 

์Šคํ”„๋ง๋ถ€ํŠธ ํ”„๋กœ์ ํŠธ์—์„œ h2 database์˜ ์›น ์ฝ˜์†”์„ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด
application.properties์— ์•„๋ž˜ ์„ค์ •์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ( ๐Ÿ“‘ ์Šคํ”„๋ง๋ถ€ํŠธ-h2-database-h2-console-์„ค์ •)

spring.h2.console.enabled=true

 


์Šคํ”„๋ง๋ถ€ํŠธ ํ”„๋กœ์ ํŠธ์— Spring Security ์˜์กด์„ฑ์ด ์ถ”๊ฐ€๋˜์–ด ์žˆ์œผ๋ฉด,
h2 ์›น ์ฝ˜์†”์— ์ ‘์†ํ•˜์—ฌ๋„ ์•„๋ž˜ ์‚ฌ์ง„์ฒ˜๋Ÿผ "localhost์—์„œ ์—ฐ๊ฒฐ์„ ๊ฑฐ๋ถ€ํ–ˆ์Šต๋‹ˆ๋‹ค" ๋ผ๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

 

๐Ÿ“Œ ํ•ด๊ฒฐ๋ฒ•


SecurityFilterChain์— ์•„๋ž˜ ์„ค์ •๋“ค์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

http
    .csrf(csrf -> csrf.disable()) // 1. csrf ์„ค์ • disable
    .headers(header-> header.frameOptions(HeadersConfigurer.FrameOptionsConfig::disable)) // 2. X-Frame-Options ํ—ค๋” ์ œ๊ฑฐ
    .authorizeHttpRequests(auth -> auth
                        .requestMatchers("/h2-console/**") // 3. h2-console ๊ฒฝ๋กœ๋Š” ์ธ์ฆ ์—†์ด ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค์ •
                        .permitAll()
                ...

 

(๋ฌผ๋ก  3๋ฒˆ์€ ์ƒ๋žต ๊ฐ€๋Šฅํ•˜๊ธด ํ•œ๋ฐ ๋‚˜๋Š” ์ €๋ ‡๊ฒŒ ํ–ˆ๋‹ค ๐Ÿ˜ƒ)

 

 

**

H2 ์ฝ˜์†”(http://localhost:8080/h2-console)์€ ๋‚ด๋ถ€์ ์œผ๋กœ <iframe>์„ ์‚ฌ์šฉํ•˜์—ฌ UI๋ฅผ ํ‘œ์‹œํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ Spring Security๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ X-Frame-Options: DENY ํ—ค๋”๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์„ค์ •์ด ์žˆ์–ด์„œ H2 ์ฝ˜์†”์ด ์ •์ƒ์ ์œผ๋กœ ๋กœ๋“œ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ์‹œํ๋ฆฌํ‹ฐ ํ•„ํ„ฐ ์ฒด์ธ์— .frameOptions().disable()์„ ์ ์šฉํ•˜๋ฉด, X-Frame-Options ํ—ค๋”๊ฐ€ ์ œ๊ฑฐ๋˜์–ด์„œ <iframe> ํƒœ๊ทธ๊ฐ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ด์ง„๋‹ค๊ณ  ํ•œ๋‹ค.

 

์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ๋Š” ์ข€ ๋” ๊ณต๋ถ€ํ•ด๋ด์•ผํ•จ

 

728x90