๐ ์ด๋ฒ ๊ธ์์๋ ํ๋ก์ ํธ ์์ฑ๋ถํฐ SecurityConfig์ ์ด๊ธฐ ์ค์ ์ ์ค๋ช ํฉ๋๋ค.
๐ค ์ ์ ์คํ๋ง ์ํ๋ฆฌํฐ ๊ตฌํ์ ์๋์ ๊ฐ์ ์๋๋ฆฌ์ค๋ฅผ ๊ธฐ์ค์ผ๋ก ํฉ๋๋ค.
- ํ๋ก ํธ ์๋์ ๋ฐฑ์๋๊ฐ ๋๋์ด ์งํ๋๋ ํ๋ก์ ํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ ์คํ๋ง ์ํ๋ฆฌํฐ ์ค์ ์์ ๋ก๊ทธ์ธ ํ์ด์ง์ ๋ํ ์ค์ ์ ๋ฐ๋ก ํ์ง ์์
- JWT ํ ํฐ ์ธ์ฆ ๋ฐฉ์์ ์ฌ์ฉํจ
- ํ ํฐ ๊ด๋ฆฌ์ redis๋ฅผ ์ด์ฉํจ
๐ ์ด์ ๊ธ ๋ณด๊ธฐ
์ฒซ ๋ฒ์งธ ๊ธ๋ถํฐ ์ ๋ ํ์๋ฉด ๋ณด๋ค ์ฝ๊ฒ ์ดํดํ์ค ์ ์์ต๋๋ค!
https://suzuworld.tistory.com/438 - ๋น์ ์ ์ฒซ ํ๋ก์ ํธ๋ฅผ ์ํ ์คํ๋ง ์ํ๋ฆฌํฐ ํบ์๋ณด๊ธฐ
๐ ๋ชฉ์ฐจ
์คํ๋ง ์ํ๋ฆฌํฐ ํบ์๋ณด๊ธฐ
SecurityConfig ๊ตฌ์ฑํ๊ธฐ (ํ์ฌ ๊ธ)
โ๏ธํ๋ก์ ํธ ์์ฑ
- ์คํ๋ง๋ถํธ 3.x, ์๋ฐ 17๋ก ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
- ์์กด์ฑ์ ์ฐธ๊ณ ํ์์ด ํ๋ก์ ํธ๋ฅผ ์์ฑํด ์ฃผ์ธ์.
๐ ํ๋ก์ ํธ ์คํํด ๋ณด๊ธฐ
- ์์ฑ๋ ํ๋ก์ ํธ๋ฅผ ๋ฐ๋ก ์คํํด ๋ด ์๋ค.
- ์คํ๋ง ์ํ๋ฆฌํฐ๊ฐ ์ ์ฉ๋์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ๋ ๋น๋ฐ๋ฒํธ๊ฐ ์์ฑ๋์์์ ํ์ธํ ์ ์์ต๋๋ค.
- ์ดํ ํ๋ก์ ํธ์์ ์ค์ ํ ํฌํธ๋ฒํธ์ /login์ด๋ผ๋ ์๋ํฌ์ธํธ๋ก ์ ์ํ๋ฉด ์ํ๋ฆฌํฐ์์ ์ ๊ณตํ๋ ๊ธฐ๋ณธ ๋ก๊ทธ์ธ ํผ ํ์ด์ง๊ฐ ๋์ด์ ํ์ธํ ์ ์์ต๋๋ค.
- ๊ธฐ๋ณธ ๊ฐ์ username(id)์ user, password๋ ์คํํ ๋ ์ฝ์์ ๋์ค๋ ๋น๋ฐ๋ฒํธ์
๋๋ค.
- ์ ์ ๊ฒฝ์ฐ์๋ ์์ ์ฌ์ง์ ๋์จ ๊ฒ๊ณผ ๊ฐ์ด Using generated security password: c151d88c-71ab-4628-8628-ebd64dd0ea36์ ๋๋ค.
- ๋ง์ฝ ๊ธฐ๋ณธ username๊ณผ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ถ๋ค๋ฉด, application.properties ํ์ผ์ด๋ application.yml ํ์ผ์ ์ฌ์ฉ์ ์ ์ ์ค์ ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
- ๋ก๊ทธ์ธ์ ํ๋ฉด ๊ธฐ๋ณธ์ ์ธ ์คํ๋ง๋ถํธ ์๋ฌํ์ด์ง๊ฐ ๋์ต๋๋ค.
- ๋น์ฐํ์ฃ ? ์์ง ์๋ฌด๊ฒ๋ ๋ง๋ค์ง ์์์ผ๋๊น์.
๐ ๏ธ ์ํ๋ฆฌํฐ Config
- ๋ณธ๊ฒฉ์ ์ผ๋ก ์ํ๋ฆฌํฐ ์ค์ ์ ํด๋ด ์๋ค.
@Configuration
- ์คํ๋ง ์ค์ ํด๋์ค์์ ๋ํ๋ด์ด ์คํ๋ง์๊ฒ ์๋ฆฝ๋๋ค.
@EnableWebSecurity
- ์น ์ํ๋ฆฌํฐ๋ฅผ ํ์ฑํํฉ๋๋ค.
@RequiredArgsConstructor
- ํด๋์ค์ ๋ชจ๋ final์ด ๋ถ์ ํ๋์ ๋ํด ์์ฑ์๋ฅผ ์๋์ผ๋ก ์์ฑํด ์ฃผ๋ ๊ธฐ๋ฅ์ ํฉ๋๋ค.
- ์ด๋ฅผ ํตํด ๋ถํ์ํ ์ฝ๋๋ฅผ ์ค์ด๊ณ , ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
- ๋ค์ ๊ธ์์ ์ฌ์ฉํฉ๋๋ค.
extends SecurityConfigurerAdapter
- ScurityConfigurerAdapter๋ ์คํ๋ง ์ํ๋ฆฌํฐ์ ์ค์ ์ ์ ์ํ ๋ ์ฌ์ฉํ๋ ์ถ์ ํด๋์ค์ ๋๋ค.
- ์ด ํด๋์ค๋ฅผ ์์๋ฐ์ ํ์ํ ์ค์ ์ ์ค๋ฒ๋ผ์ด๋ํ์ฌ ๊ตฌํํฉ๋๋ค.
<DefaultSecurityFilterChain, HttpSecurity>
- ์ ๋ค๋ฆญ ํ์ <DefaultSecurityFilterChain, HttpSecurity>๋ ์ค์ ํ ์ํ๋ฆฌํฐ ํํฐ ์ฒด์ธ๊ณผ ์ค์ ๊ฐ์ฒด๋ฅผ ์ง์ ํฉ๋๋ค.
- DefaultSecurityFilterChain : ๊ธฐ๋ณธ ์ํ๋ฆฌํฐ ํํฐ ์ฒด์ธ์ผ๋ก, ์ฌ๋ฌ ์ํ๋ฆฌํฐ ํํฐ๋ค์ด ํฌํจ๋์ด ์์ต๋๋ค.
- HttpSecurity : HTTP ๋ณด์ ์ค์ ์ ๊ตฌ์ฑํ๋ ๊ฐ์ฒด๋ก ํน์ URL ํจํด์ ๋ํ ๋ณด์ ์ค์ ์ ์ ์ํ ์ ์์ต๋๋ค.
โ๏ธ SecurityFilterChain
- ๊ตฌ๊ธ๋ง์ ํตํด ๋์ค๋ WebSecurityConfigurerAdapter๋ฅผ ์์ํ๊ณ configure ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํ๋ ๋ฐฉ์์ ์คํ๋ง ๋ถํธ 3.x ์ด์๋ถํฐ ์คํ๋ง ์ํ๋ฆฌํฐ 6 ์ด์ ๋ฒ์ ์ด ์ ์ฉ๋๋ฉด์ deprecated ๋์์ต๋๋ค. ๋ฐ๋ผ์ ํ์ฌ๋ @Bean์ผ๋ก ๋ฑ๋กํ์ฌ ๊ตฌํํ๋ ๋ฐฉ์์ ์ฌ์ฉํ์๋ฉด ๋ฉ๋๋ค.
- ๊ฐ์ข ์ค์ ์ HttpSecurity๋ฅผ ํตํด ์ด๋ค์ง๋๋ค.
๐จ๐ป๐ฌ ๋ด๋ถ ์ค์
- ์ ์ฌ์ง๊ณผ ๊ฐ์ด HttpSecurity๋ฅผ ์ด์ฉํ์ฌ ๊ฐ์ข ์ค์ ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
- ์ด๊ณณ์์ csrf, oauth2, ๊ฐ์ข
ํํฐ, ํธ๋ค๋ฌ, ๋ก๊ทธ์ธ ํ์ด์ง ๋ฑ ๋ค์ํ ์ํ๋ฆฌํฐ ๊ด๋ จ ์ค์ ์ ํ ์ ์์ต๋๋ค.
- ์ด ์์์์๋ ๊ตฌํ์ ํ์ํ ์ต์ํ์ ๊ธฐ๋ฅ๋ง์ ๋ค๋ฃน๋๋ค.
- oauth2๋ ๋ก๊ทธ์ธํ์ด์ง์ ๋ํ ์ถ๊ฐ ์ค์ ์ด ํ์ํ๋ฉด ๊ตฌ๊ธ๋ง์ ํตํด ์ฐพ์๋ณด์๋ฉด ์๊ฐ๋ณด๋ค ์ฝ๊ฒ ํ์ค ์ ์์ต๋๋ค.
- ํต์ฌ์ ์ ์ฒด์ ์ธ ๋์์๋ฆฌ์ ๋ํ ์ดํด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
- ์ผ๋จ ์ ์ค์ ์ ๋ํด ์์๋ด ์๋ค.
- ์ ๋ด์ฉ์ด ์ ๋ถ๋ ์๋๋๋ค. ์ฒ์์ ๋ค ์ถ๊ฐํ๋ ๊ฒ๋ณด๋ค ์์๋๋ก ์ถ๊ฐํ๋ ๊ฒ์ด ์ข์ ๊ฒ ๊ฐ์์ ๋ค๋ฅธ ์ค์ ์ ํด๋น ๋ด์ฉ์ด ๋์ฌ ๋ ์ถ๊ฐํ๊ฒ ์ต๋๋ค.
โจ ๋๋ค(Lambda)
- ์คํ๋ง ์ํ๋ฆฌํฐ 6.1 ์ดํ๋ถํฐ๋ ์ํ๋ฆฌํฐ ์ค์ ์ ๊ตฌ์ฑํ ๋ ๋๋ค DSL์ ์ด์ฉํฉ๋๋ค.
- ๋๋ค์์ ์ต๋ช ํจ์๋ฅผ ๊ฐ๋จํ๊ฒ ํํํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
- ::๋ ->์ ๊ฐ์ ์์ ํํ์ ์ฒ์ ๋ณด์ ๋ถ๋ค์ ๋ณ ๊ฑฐ ์๊ณ ๊ทธ๋ฅ ํจ์ ํํ ๋ฐฉ์์ด ๋๋ค๋ผ๋ ๊ฒ์ด๋ ๋์ด๊ฐ์ ๋ ๋ฉ๋๋ค.
- ๊ถ๊ธํ์ ๋ถ๋ค์ ์๋ ๊ธ์ ์ฐธ๊ณ ํด ์ฃผ์ธ์.
https://docs.spring.io/spring-security/reference/migration-7/configuration.html
Configuration Migrations :: Spring Security
The Lambda DSL is present in Spring Security since version 5.2, and it allows HTTP security to be configured using lambdas. You may have seen this style of configuration in the Spring Security documentation or samples. Let us take a look at how a lambda co
docs.spring.io
csrf(AbstractHttpConfigurer::disable)
- csrf(์ฌ์ดํธ ๊ฐ ์์ฒญ ์์กฐ)๋ ์ธ์ ์ด๋ ์ฟ ํค ์ธ์ฆ ๋ฐฉ์์ ์ทจ์ฝ์ ์ ๋ ธ๋ฆฐ ๊ณต๊ฒฉ ๋ฐฉ์์ ๋๋ค.
- ์ฌ๊ธฐ์์๋ JWT ํ ํฐ ์ธ์ฆ ๋ฐฉ์์ ์ฌ์ฉํ ๊ฒ์ด๋ฏ๋ก ํด๋น ๊ณต๊ฒฉ์ ๋ํ ๋ฐฉ์ด๊ฐ ํ์ ์์ด ์ค์ ์ ๋นํ์ฑํํ๋ ๊ฒ์ ๋๋ค.
- ์ด ๋ถ๋ถ์ ๋ํ ์ค๋ช ๋ง์ผ๋ก ๊ธ ์ฌ๋ฌ ๊ฐ๋ฅผ ์์ฑ์ด ๊ฐ๋ฅํ ์ ๋๋ก ๋ฐฉ๋ํ ๋ถ๋์ด๋ฏ๋ก ์ ์์ฝ ์ ๋ฆฌ๋ ๋ธ๋ก๊ทธ ๊ธ์ ์๊ฐํด๋๋ฆฌ๊ฒ ์ต๋๋ค.
CSRF(Cross-Site Request Forgery) Attack and Defence
<br /><br />
junhyunny.github.io
.httpBasic(AbstractHttpConfigurer::disable)
- HTTP Basic ์ธ์ฆ์ ์ฌ์ฉ์ ์ด๋ฆ๊ณผ ๋น๋ฐ๋ฒํธ๋ฅผ Base64๋ก ์ธ์ฝ๋ฉํ์ฌ HTTP ํค๋์ ํฌํจ์์ผ ์๋ฒ์ ์ ์กํ๋ ๋ฐฉ์์ผ๋ก ์ด๊ฒ ์ญ์ JWT ํ ํฐ ์ธ์ฆ ๋ฐฉ์์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋นํ์ฑํํฉ๋๋ค.
.formLogin(AbstractHttpConfigurer::disable)
- ์คํ๋ง ์ํ๋ฆฌํฐ๊ฐ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ๋ ๋ก๊ทธ์ธ ํผ ๊ธฐ๋ฅ์ ๋นํ์ฑํํฉ๋๋ค.
- ์์์ ์ ๊ฐ ๋ณด์ฌ๋๋ฆฐ ๊ธฐ๋ณธ ๋ก๊ทธ์ธ ํ์ด์ง๋ฅผ ๋งํฉ๋๋ค.
- ์ ํฌ๋ ๋ฐฑ์๋ ์์ญ๋ง ๋ง๋ค ๊ฑฐ๋๊น ํ์ ์์ต๋๋ค.
.authorizeHttpRequests((authorizeRequests) -> authorizeRequests
.requestMatchers("/login").permitAll()
.anyRequest().authenticated())
- HTTP ์์ฒญ์ ๋ํ ์ธ๊ฐ ๊ท์น์ ์ค์ ํฉ๋๋ค.
- ํ ํ๋ก์ ํธ์์ ๋ฐฑ์๋ ํํธ๋ ์ฌ๋ฌ api๋ฅผ ๋ง๋ค ๊ฒ์ด๊ณ , ํด๋ผ์ด์ธํธ๋ ์ฌ๋ฌ ํ์ด์ง๋ฅผ ๋ง๋ค์ด api๋ฅผ ๋ถ์ด์์์. ์ด๋ ๋ฐฑ์๋์์ ๋ง๋ ์ฌ๋ฌ api ์๋ํฌ์ธํธ์ ์ด๋๊ฐ๋ ๊ถํ์ด ํ์ํ ๊ฒ์ด๊ณ , ์ด๋๊ฐ๋ ๊ถํ์ด ํ์ ์์ ํ ๋ฐ์.
- ์๋ฅผ ๋ค๋ฉด ๋ก๊ทธ์ธํ ์ํ๋ก ์ ๊ทผ ์์ฒญ์ ํด์ผ ํ๋ api์ ๊ทธ๋ ์ง ์์ api๋ฅผ ๊ตฌ๋ถํ๋ ์ค์ ์ ํ๋ ๋ถ๋ถ์ ๋๋ค.
- ๋๋ค์์ ์ฌ์ฉํ์ฌ HTTP ์์ฒญ์ ๋ํ ์ธ๊ฐ ๊ท์น์ ์ค์ ํฉ๋๋ค.
- reuestMatcher๋ ์์ฒญ api ์๋ํฌ์ธํธ๋ฅผ ์ ์ต๋๋ค.
- ์ ์ ๊ฒฝ์ฐ์๋ /login์ด๋ผ๋ ์๋ํฌ์ธํธ๋ ๋๊ตฌ๋ ์ ๊ทผ ๊ฐ๋ฅํ๊ฒ ์ค์ ํ์ต๋๋ค.
- ๋ก๊ทธ์ธํ ํ์ด์ง๋ฅผ ๋ก๊ทธ์ธ ์ฌ์ฉ์๋ง ์ ๊ทผ๊ฐ๋ฅํ๊ฒ ํ๋ค๋ฉด ์๋ฌด๋ ๋ก๊ทธ์ธ ํ ์ ์๊ฒ ์ฃ ?
- ๋ก๊ทธ์ธ ์ธ ์์ฒญ์ ๋ก๊ทธ์ธ ์ฌ์ฉ์๋ง ์ด์ฉ ๊ฐ๋ฅํ ๊ต์ฅํ ํ์์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋คใ .ใ
๐ค ํน์ ์๋ํฌ์ธํธ์ ๋ํ ์์ธํ ์ค์
- ํน์ ์๋ํฌ์ธํธ์ ๋ํด ๊ต์ฅํ ์์ธํ ์ ๊ทผ ๊ถํ ๋ฑ์ ์ค์ ํ ์ ์์ต๋๋ค.
- ์ ๋ ์ ๋ถ ์ฌ์ฉํด๋ณด์ง๋ ์์์ง๋ง ๋ฉ์๋ ๋ช
์ผ๋ก ๊ธฐ๋ฅ์ ์ง์ํ ์ ์์ต๋๋ค.
- ์๋ฅผ ๋ค๋ฉด permitAll์ ํด๋น ๊ฒฝ๋ก๋ ๋๊ตฌ๋ ์ ๊ทผ ๊ฐ๋ฅํ๋ค. demyAll์ ๋๊ตฌ๋ ์ ๊ทผํ ์ ์๋ค. ๋ญ ๊ทธ๋ฐ ๊ฑฐ๊ฒ ์ฃ ?
๐ ๋ํ์ ์ธ ํจํด ๊ฒฝ๋ก ๋งค์นญ
.requestMatchers("/admin") // /admin ๊ฒฝ๋ก์ ์ ํํ ์ผ์นํ๋ ์์ฒญ
.requestMatchers("/admin/*") // /admin/ ํ์์ ํ ์์ค ๊ฒฝ๋ก์ ๋งค์นญ, ์: /admin/user
.requestMatchers("/admin/**") // /admin/ ํ์์ ๋ชจ๋ ๊ฒฝ๋ก์ ๋งค์นญ, ์: /admin/user/edit
.requestMatchers("/*.html") // ๋ฃจํธ ๋๋ ํ ๋ฆฌ์ ๋ชจ๋ .html ํ์ผ ์์ฒญ๊ณผ ๋งค์นญ
.requestMatchers("/admin/{regex:[a-z]+}") // ์ ๊ท ํํ์์ ์ฌ์ฉํ ๋งค์นญ
.requestMatchers(HttpMethod.GET, "/admin/**") // GET ์์ฒญ์ ๋ํด /admin/ ํ์์ ๋ชจ๋ ๊ฒฝ๋ก์ ๋งค์นญ
- ์์ ๊ฐ์ด ์ ๊ทผ ๊ฒฝ๋ก์ ๋ํ ํจํด ๋งค์นญ์ ํตํด ์ปค์คํ ํ๊ฒ ์ค์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
๐ ์์
.requestMatchers("/admin/**").hasRole("ADMIN")
.requestMatchers("/user/**").hasRole("USER")
.requestMatchers("/", "/home").permitAll()
.anyRequest().authenticated()
- ์ด๋ฐ ์์ผ๋ก ์ค์ ํ๋ฉด ๋ฉ๋๋ค.
.requestMatchers("/admin/**").hasRole("ADMIN")
- /admin์ด ํฌํจ๋ ๋ชจ๋ ์๋ํฌ์ธํธ๋ ๋ก๊ทธ์ธ ์ฌ์ฉ์ ์ค ADMIN์ด๋ผ๋ Role์ ๊ฐ์ง ์ฌ๋๋ง์ด ์ ๊ทผ ๊ฐ๋ฅํ๋ค๋ ์ค์ ์ ๋๋ค.
.requestMatchers("/user/**").hasRole("USER")
- /user๊ฐ ํฌํจ๋ ๋ชจ๋ ์๋ํฌ์ธํธ๋ ๋ก๊ทธ์ธ ์ฌ์ฉ์ ์ค USER๋ผ๋ Role์ ๊ฐ์ง ์ฌ๋๋ง์ด ์ ๊ทผ ๊ฐ๋ฅํ๋ค๋ ์ค์ ์ ๋๋ค.
.requestMatchers("/", "/home").permitAll()
- "/"๋ "/home"์ ๋ชจ๋ ์ ๊ทผ ๊ฐ๋ฅํ ์๋ํฌ์ธํธ๋ผ๋ ์ค์ ์ ๋๋ค.
.anyRequest().authenticated()
- ์ด์ธ์ ๋ชจ๋ ์์ฒญ์ ํน๋ณํ Role ์์ด ๋ก๊ทธ์ธํ ์ฌ์ฉ์๋ ๋ชจ๋ ์ ๊ทผ ๊ฐ๋ฅํ๋ค๋ ์ค์ ์ ๋๋ค.
.sessionManagement(sessionManagement -> sessionManagement
.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
- ์คํ๋ง ์ํ๋ฆฌํฐ๊ฐ ์ธ์ ์ ์์ฑํ๊ฑฐ๋ ์ ์งํ์ง ์๋๋ก ์ค์ ํ๋ ๋ถ๋ถ์ ๋๋ค.
- ์ด ๋ถ๋ถ ์ญ์ JWT ํ ํฐ ์ธ์ฆ ๋ฐฉ์์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ธ์ ์ ๋ง๋ค์ง ์๋๋ก ์ค์ ํฉ๋๋ค.
return http.build();
- ์์์ ์ค์ ํ ๊ตฌ์ฑ์ ๋น๋ํ๊ณ ๋ฆฌํดํฉ๋๋ค.
๐๐ป ๋ค์์ผ๋ก ๋์ด๊ฐ๊ธฐ
- ํ์ฌ๊น์ง์ ์ค์ ์ผ๋ก๋ ์๋ฌด๊ฒ๋ ํ ์๊ฐ ์๊ฒ ์ฃ .
- ์ด์ ๋ถํฐ๋ ์ด ์ค์ ์ ์ ์ฉ๋ฐ์ ํํฐ๋ฅผ ์ถ๊ฐํ๊ณ ๋ก๊ทธ์ธ์ด๋ ๋ก๊ทธ์์ ๋ฑ์ ์์ ์ ๊ตฌํํด์ผ ํฉ๋๋ค.
- ์์ ๊ฐ์ด addFilter์ ๊ฐ์ ๋ฉ์๋ ๋ฑ์ผ๋ก ํํฐ๋ฅผ ์ ์ฉํ๊ณ , ์์๋ฅผ ์ ํ ์ ์์ต๋๋ค.
- ๋ค์ ๊ธ์์๋ ๋ก๊ทธ์ธ ์ธ์ฆ์ ์ฒ๋ฆฌํ๋ ํํฐ๋ฅผ ๋ง๋ค์ด๋ณด๊ฒ ์ต๋๋ค.
์ฐธ๊ณ
๋คผํผ
https://velog.io/@sehwan24/Lamda-DSL์-์ด์ฉํ-HttpSecurity-WebSecurity-๊ตฌ์ฑ