Post

[Spring Security] HttpSecurity์™€ WebSecurity

[Spring Security] HttpSecurity์™€ WebSecurity

๐Ÿ“Œ WebSecurity

WebSecurity ๋Š” ์ „์—ญ์ ์ธ ๋ณด์•ˆ์„ ๋‹ด๋‹นํ•œ๋‹ค. SecurityBuilder ์˜ ๊ตฌํ˜„์ฒด๋กœ FilterChainProxy ๋ฅผ ์ƒ์„ฑ ๋ฐ ์„ค์ •ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

FilterChainProxy ๋Š” ๋ชจ๋“  ์›น ์š”์ฒญ์„ ๊ฐ€์žฅ ๋จผ์ € ๋ฐ›์•„ ์–ด๋–ค SecurityFilterChain ์„ ์ ์šฉํ• ์ง€ ๊ฒฐ์ •ํ•œ๋‹ค.

1
2
3
4
5
@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
    return (web) -> web.ignoring()
                       .requestMatchers("/css/**", "/js/**", "/images/**", "/favicon.ico");
}

ํ˜„์žฌ๋Š” WebSecurityCustomizer ๋นˆ์„ ๋“ฑ๋กํ•˜์—ฌ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค.

WebSecurity ๋ฅผ ํ†ตํ•ด ํŠน์ • ๊ฒฝ๋กœ์˜ ์š”์ฒญ์„ ํ•„ํ„ฐ ์ฒด์ธ์—์„œ ์™„์ „ํžˆ ์ œ์™ธํ•  ์ˆ˜์žˆ๋Š”๋ฐ, ์ด๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ignoring ๋ฉ”์„œ๋“œ์ด๋‹ค. ์ฆ‰, ignoring ๋ฉ”์„œ๋“œ์— ํŠน์ • ๊ฒฝ๋กœ๋ฅผ ๋ช…์‹œํ•˜๋ฉด ํ•ด๋‹น ๊ฒฝ๋กœ๋“ค์— ๋Œ€ํ•ด FilterChainProxy ๊ฐ€ ์•„์˜ˆ ๋™์ž‘ํ•˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.

์ด๋Š” ๊ณง ์„ค์ •๋œ ๊ฒฝ๋กœ๋“ค์— ๋Œ€ํ•ด ์ธ์ฆ/์ธ๊ฐ€ ์ ˆ์ฐจ๋ฅผ ์ง„ํ–‰ํ•˜์ง€ ์•Š๊ณ , ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ณด์•ˆ ๊ธฐ๋Šฅ๋“ค์„ ๊ฑฐ์น˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๊ธฐ๋ณธ์ ์ธ ๋ณด์•ˆ ์ ˆ์ฐจ๋Š” ๊ฑฐ์น˜๋ฉด์„œ ๋ชจ๋“  ์‚ฌ์šฉ์ž๊ฐ€ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ›„์ˆ ํ•  HttpSecurity์˜ permitAll ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

1
2
3
4
5
6
@Bean(name = AbstractSecurityWebApplicationInitializer.DEFAULT_FILTER_NAME)
public Filter springSecurityFilterChain() throws Exception {
	
	// ...
	return this.webSecurity.build();
}

build ๋ฉ”์„œ๋“œ๋Š” ์ตœ์ข…์ ์œผ๋กœ FilterChainProxy ๋ผ๋Š” ๋‹จ์ผ Filter ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

๐Ÿ“Œ HttpSecurity

HttpSecurity ๋Š” HTTP ์š”์ฒญ ๋‹จ์œ„์˜ ์„ธ๋ถ€ ๋ณด์•ˆ์„ ๋‹ด๋‹นํ•œ๋‹ค. WebSecurity ๋ฅผ ํ†ต๊ณผํ•œ ์š”์ฒญ์ด ์‹ค์ œ๋กœ ์–ด๋–ค ์ธ์ฆ/์ธ๊ฐ€ ๊ทœ์น™์„ ๋”ฐ๋ผ์•ผ ํ•˜๋Š”์ง€ ์ •์˜ํ•œ๋‹ค.

HttpSecurity ์—ญ์‹œ SecurityBuilder ์˜ ๊ตฌํ˜„์ฒด๋กœ, WebSecurity ๋ณด๋‹ค ๋” ์„ธ๋ถ€์ ์ธ ๊ทœ์น™์„ ์ •์˜ํ•œ๋‹ค. ๋‹ค๋ฅด๊ฒŒ ๋งํ•˜๋ฉด WebSecurity ๊ฐ€ HttpSecurity ๋ณด๋‹ค ์ƒ์œ„ ๊ฐœ๋…์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜๋‚˜์˜ HttpSecurity ์„ค์ •์€ ํ•˜๋‚˜์˜ SecurityFilterChain ์„์ƒ์„ฑํ•œ๋‹ค. ์—ญ์‹œ ์ด๋Š” build ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋œ๋‹ค.

authorizeHttpRequests ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด URL ํŒจํ„ด์— ๋”ฐ๋ฅธ ์—ญํ• , ๊ถŒํ•œ ๊ธฐ๋ฐ˜์˜ ์ ‘๊ทผ ํ—ˆ์šฉ ๋˜๋Š” ๊ฑฐ๋ถ€ ๊ทœ์น™์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

formLogin, oauth2Login ๋“ฑ ์—ฌ๋Ÿฌ ์ธ์ฆ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

csrf, cors ๋“ฑ์œผ๋กœ ๊ฐ์ข… ๋ณด์•ˆ ๊ธฐ๋Šฅ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

permitAll ์— ํŠน์ • ๊ฒฝ๋กœ ๋ช…์‹œํ•˜๋ฉด ์ธ์ฆ ๊ฒฐ๊ณผ ๋ฌด์‹œ

๐Ÿ“Œ WebSecurity vs. HttpSecurity

ํ‘œ๋กœ ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค.

๊ตฌ๋ถ„WebSecurityHttpSecurity
์—ญํ• ์ „์—ญ ๋ณด์•ˆ ์„ค์ •HTTP ์š”์ฒญ ๊ธฐ๋ฐ˜ ๋ณด์•ˆ ์„ค์ •
์ ์šฉ ๋ ˆ๋ฒจSpring Securityย ํ•„ํ„ฐ ์ฒด์ธ ์ง„์ž… ์ „Spring Securityย ํ•„ํ„ฐ ์ฒด์ธ ๋‚ด๋ถ€
์ฃผ์š” ๋ชฉ์ ํŠน์ • ์š”์ฒญ์„ SecurityFilterChainย ์—์„œย ์™„์ „ํžˆ ๋ฌด์‹œ์ธ์ฆ/์ธ๊ฐ€ ๊ทœ์น™ ์ •์˜
์ตœ์ข… ๊ฒฐ๊ณผ๋ฌผFilterChainProxySecurityFilterChainย 
์„ค์ • ๋ฐฉ๋ฒ•WebSecurityCustomizerย ๋นˆ ๋“ฑ๋ก๋นˆ์œผ๋กœ ย SecurityFilterChain์„ ๋ฆฌํ„ดํ•˜๋Š” ๋ฉ”์„œ๋“œ ์ •์˜

๐Ÿ“Œ ์ฐธ๊ณ 

https://soojae.tistory.com/52

This post is licensed under CC BY 4.0 by the author.