[Spring Security] SecurityFilterChain ํํฐ ๋ชฉ๋ก ํ์ธํ๊ธฐ (๋๋ฒ๊น /๋ก๊ทธ)
์ด๋ฒ์ ํ๊ณ ์๋ ๋์ค์ฝ๋์ ๋ฏธ์ ์์
Spring Security๋ฅผ ๋์ ํ๊ฒ ๋์์ต๋๋ค.
๊ธฐ๋ณธ์ ์ธ SecurityFilterChain์ ๋ฑ๋กํ๊ณ , ์ด๋ ๋ฑ๋ก๋๋ ํํฐ ๋ชฉ๋ก์ ๋๋ฒ๊น ํด๋ด์ผ ํฉ๋๋ค.
๊ตฌ๊ธ๋ง ๊ฒฐ๊ณผ ๋๋ฒ๊น ์ธ์๋ ๋ก๊ทธ๋ก ํ์ธํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ด์ ์ค๋์ 2๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ํํฐ ๋ชฉ๋ก์ ํ์ธํ๊ณ ์ ํฉ๋๋ค.
Spring Boot 3.4.0 / Spring Security 6.4.1 ํ๊ฒฝ์์ ๊ฐ๋ฐํ๊ณ ์์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ด build.gradle์ ์์กด์ฑ์ ์ถ๊ฐํฉ๋๋ค.
// spring security
implementation("org.springframework.boot:spring-boot-starter-security")
testImplementation("org.springframework.security:spring-security-test")
1. SecurityFilterChain ๋น ๋๋ฒ๊น
์๋์ ๊ฐ์ ๊ธฐ๋ณธ์ ์ธ ์ค์ ๋ง ํ SecurityFilterChani์ ๋ฑ๋กํฉ๋๋ค.
- csrf.disable(): CSRF ๋ณดํธ ๋นํ์ฑํ
- CSRF๋ ์ฌ์ดํธ ๊ฐ ์์ฒญ ์์กฐ ๊ณต๊ฒฉ์ผ๋ก, CSRF ๋ณดํธ ์ค์ ์ ํ๋ฉด ๋ณ๊ฒฝ์ ์ผ์ผํค๋ ์์ฒญ์ ๋ํด CSRF ํ ํฐ์ด ์์ผ๋ฉด 403 Forbidden์ผ๋ก ๋ง์ง๋ง, ์ง๊ธ์ ๊ณต๋ถ ๋จ๊ณ์ด๋ฏ๋ก ์ด ๋ณดํธ ์ค์ ๋ disableํฉ๋๋ค.
- anyRequest.permitAll(): ๋ชจ๋ ์์ฒญ์ ๋ํด ์ธ์ฆ ์์ด ํ์ฉ
- httpBasic(Customizer.withDefaults()): HTTP Basic ์ธ์ฆ์ ๊ธฐ๋ณธ ์ค์ ์ผ๋ก ํ์ฑํ
- Authorization ํค๋๋ฅผ ์ฐ๋ HTTP Basic ์ธ์ฆ ๋ฐฉ์์ ๋ณ๋์ ์ค์ ์์ด ๊ธฐ๋ณธ์ผ๋ก ์ ์ฉํฉ๋๋ค.
@Configuration
public class SecurityConfig {
@Bean
SecurityFilterChain chain(HttpSecurity httpSecurity) throws Exception {
httpSecurity
.csrf(csrf -> csrf.disable())
.authorizeHttpRequests(auth ->
auth.anyRequest().permitAll())
.httpBasic(Customizer.withDefaults());
return httpSecurity.build();
}
}
์ฌ๊ธฐ์ return๋ฌธ์ ์ค๋จ์ ์ ์ฐ๊ณ ๋๋ฒ๊น ์ ํด๋ด ๋๋ค.
return๋ฌธ์ด ํํฐ ์ฒด์ธ์ด ๋ง๋ค์ด์ง๋ ์์ ์ ๋๋ค.
Thread & Variables์์ ํํฐ ๋ชฉ๋ก์ ํ์ธํ ์ ์์ต๋๋ค.
์ค์ ์ ๋ฐ๋ผ ์กฐ๊ธ์ฉ ๋ค๋ฅผ ์ ์์ต๋๋ค.
1. DisableEncodeUrlFilter
2. WebAsyncMangerIntegrationFilter
3. SecurityContextHolderFilter
4. HeaderWriterFilter
5. LogoutFilter
6. BasicAuthenticationFilter
7. RequestCacheAwareFilter
8. SecurityContextHolderAwareRequestFilter
9. AnonymousAuthenticationFilter
10. ExceptionTranslationFilter
11. AuthorizationFilter
2. ๋ก๊ทธ๋ก ํ์ธํ๊ธฐ
๋๋ฒ๊น ์ ํ์ง ์๊ณ
Configuration ํด๋์ค์ @EnableWebSecurity(debug=true) ์ ๋ ธํ ์ด์ ์ ์ถ๊ฐํ์ฌ ๋ก๊ทธ๋ฅผ ํ์ธํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
@Configuration
@EnableWebSecurity(debug = true)
public class SecurityConfig {
@Bean
SecurityFilterChain chain(HttpSecurity httpSecurity) throws Exception {
httpSecurity
.csrf(csrf -> csrf.disable())
.authorizeHttpRequests(auth ->
auth.anyRequest().permitAll())
.httpBasic(Customizer.withDefaults());
return httpSecurity.build();
}
}
์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ํ๋ฉด์ ์ฝ์์์ ๋ณผ ์ ์์ต๋๋ค.
********************************************************************
********** Security debugging is enabled. *************
********** This may include sensitive information. *************
********** Do not use in a production system! *************
********************************************************************
localhost:8080์ผ๋ก ์๋ฌด ์์ฒญ์ด๋ ๋ ๋ ค๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์์ฒญ์ ๋ํด ๋ก๊ทธ๊ฐ ์ฐํ๋๋ค.
1๋ฒ ๋ฐฉ๋ฒ์์ ๋ดค๋ ํํฐ์ ๋๊ฐ์ด ๋ฑ๋ก๋๋ค์.
************************************************************
Request received for GET '/favicon.ico':
org.apache.catalina.connector.RequestFacade@36eabd64
servletPath:/favicon.ico
pathInfo:null
headers:
host: localhost:8080
connection: keep-alive
sec-ch-ua-platform: "Windows"
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36
sec-ch-ua: "Chromium";v="136", "Google Chrome";v="136", "Not.A/Brand";v="99"
sec-ch-ua-mobile: ?0
accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-fetch-site: same-origin
sec-fetch-mode: no-cors
sec-fetch-dest: image
referer: http://localhost:8080/
accept-encoding: gzip, deflate, br, zstd
accept-language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7,ja;q=0.6
cookie: Idea-f58542b4=3011ef8d-4436-40f2-981e-2efba38b0a5a; JSESSIONID=C4394633990297DCB56BD92AEB538AC8
Security filter chain: [
DisableEncodeUrlFilter
WebAsyncManagerIntegrationFilter
SecurityContextHolderFilter
HeaderWriterFilter
LogoutFilter
BasicAuthenticationFilter
RequestCacheAwareFilter
SecurityContextHolderAwareRequestFilter
AnonymousAuthenticationFilter
ExceptionTranslationFilter
AuthorizationFilter
]
************************************************************
์ด์ฒ๋ผ ์ปค์คํ ํํฐ๋ฅผ ๋ฐ๋ก ๋ฑ๋กํ์ง ์์๋ SecurityConfig ์ค์ ์ ํตํด ์์ ๊ฐ์ด ํํฐ ์ฒด์ธ์ด ์์ฑ๋ฉ๋๋ค.