๐ง SecurityBuilder & SecurityConfigurer SecurityBuilder๋ ์น ๋ณด์์ ๊ตฌ์ฑํ๋ ๋น ๊ฐ์ฒด์, ์ค์ ํด๋์ค๋ค์ ์์ฑํ๋ ์ญํ ์ ์ํํ๋ฉฐ, ๊ทธ ์ข
๋ฅ๋ก๋ WebSecurity, HttpSecurity๊ฐ ์์ต๋๋ค. SecurityConfigurer์ Http ์์ฒญ๊ณผ ๊ด๋ จ๋ ๋ณด์์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ๋ ํํฐ๋ค์ ์์ฑํ๊ณ , ์ฌ๋ฌ ์ด๊ธฐํ ์์
์ ๊ด์ฌํฉ๋๋ค. SecurityBuilder๋ ์๋์ ๊ฐ์ด SecurityConfigurer๋ฅผ ํฌํจํ๊ณ ์์ผ๋ฉฐ, ์ธ์ฆ ๋ฐ ์ธ๊ฐ ์ด๊ธฐํ ์์
์ SecurityBuilder ๋ด๋ถ์์ SecurityConfigurer๋ฅผ ํตํด ์งํ๋ฉ๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ์ด๊ธฐํ ์์
์ SecurityBuilder์ build() ๋ด๋ถ์์ ์คํ๋๋ฉฐ, ์๋์ ๊ฐ์ด init()๊ณผ ..
๐๏ธ Spring/Security
@WebMvcTest๋ฅผ ํตํด Controller์ ๋ํ ํ
์คํธ๋ฅผ ์งํํ๋ ๊ฒฝ์ฐ Spring Security๋ฅผ ์ ์ฉํ์๋ค๋ฉด Security๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ณธ์ ์ธ Filter๋ค์ ๋ํ์ฌ ์ด๋ป๊ฒ ๋์ํด์ผ ํ๋์ง ๊ฑฑ์ ์ด ๋ ์๋ ์์ผ๋ฉฐ, ํ
์คํธ ์งํ ๋์ค Error creating bean~~๋ฑ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์๋ ์์ต๋๋ค. ์ด์ ๋ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. ์ด๋ค ์ค๋ฅ๊ฐ ๋ฐ์ํ๋์? ๐ง ์๋๋ ์ ๊ฐ ๋ฐ์์์ผฐ๋ ์ค๋ฅ์ด๋ฉฐ, ์ ๊ฐ ์์ฑํ ํด๋์ค์ ์ด๋ฆ์ด๋ Directory์ ๋ํ ๊ฒฝ๋ก๋ ~~ ๋ก ์ฒ๋ฆฌํ์์ต๋๋ค. Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name '~~..
์ฒ์ ํด๋น ์ฝ๋ ์์ฑํ ๋, ์ ๋ง ์ค๋ ์๊ฐ์ด ๊ฑธ๋ ธ์ต๋๋ค ๊ด๋ จ๋ ์๋ฃ๊ฐ ์๋ฒ์ฌ์ด๋ ๋๋๋ง์ ํตํด ํ์๊ฐ์
์ ์งํํ๋ ์์๋ฐ์ ์์๊ณ , REST API๋ฅผ ์ฌ์ฉํ์ฌ ํต์ ํ ๋ ์ด๋ป๊ฒ ์ฒ๋ฆฌํด์ผ ํ๋์ง์ ๋ํ ์๋ฃ๊ฐ ์์ด์ ๋๊ฒ ๊ณ ์ ๋ง์ดํ์์ต๋๋ค. ์ ์ ๊ฐ์ ์ฌ๋์ด ๋ง์๊น๋ด ์ด๋ ๊ฒ ์ง๊ธ๊น์ง ํ๋ ๊ฒ๋ค์ ์จ๋ณด๊ฒ ์ต๋๋ค. ๋์ ์๋ฆฌ ํ๋ก ํธ์๋๋ ๋ฆฌ์กํธ๋ฅผ ์ฌ์ฉํ๊ณ (๋ฆฌ์กํธ๊ฐ ์๋์ด๋ ์๊ด์์ต๋๋ค), ๋ฐฑ์๋๋ก๋ ์คํ๋ง์ ์ฌ์ฉํ์ฌ ๋ก๊ทธ์ธ์ ์งํํ ๊ฒ์
๋๋ค. ๋ฆฌ์กํธ๋ ํ๋๋ฒ์ ๋ชจ๋ฅด๊ธฐ์ ๋์ด๊ฐ๊ณ , ๋ฐฑ์๋์ ๊ตฌ์ฑ ์ฝ๋๋ง ์์ฑํ๊ฒ ์ต๋๋ค. ์ฐ์ ํ๋ก ํธ์์ ์์
๋ก๊ทธ์ธ API๋ฅผ ์ฌ์ฉํ์ฌ AccessToken์ ๋ฐ์์ค๋ ์ฝ๋๊น์ง๋ ์์ฑํด ์ฃผ์ด์ผ ํฉ๋๋ค. ํ๋ก ํธ์์๋ AccessToken์ ๋ฐ๊ธ๋ฐ์ ์๋ฒ์ ์ ๋ฌํด์ฃผ๊ณ , ์๋ฒ์์๋ ํด๋น..
๐ง JSON์ผ๋ก ๋ก๊ทธ์ธ์ฒ๋ฆฌ ํ๊ธฐ ์คํ๋ง ์ํ๋ฆฌํฐ์ formLogin()์ ์ฌ์ฉํ๋ฉด ์ค๋ก์ง Content-Type์ด x-www-form-urlencoded์ธ ๋ฐฉ์์ผ๋ก๋ง ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค. formLogin์ ์ฌ์ฉํ์ง ์๊ณ , JSON์ผ๋ก username๊ณผ password๋ฅผ ๋ฐ์์ ๋ก๊ทธ์ธ ์ฒ๋ฆฌ๋ฅผ ์งํํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ๐ง formLogin()์ ์๋๋ฐฉ์ ์ํ๋ฆฌํฐ์ formLogin()์ ํ์ฑํ ์ํค๋ฉด ๋ค์ ์ฌ์ง๊ณผ ๊ฐ์ด FormLoginConfigurer๊ฐ ํ์ฑํ ๋๋๊ฒ์ ์ ์ ์์ต๋๋ค. ์ด๋ FormLoginConfigurer ์์๋ UsernamePasswordAuthenticationFilter๋ ๊ฒ์ ์ฌ์ฉํ๋๋ฐ ์ด์ ๋ํ ์๋๋ฐฉ์์ ํ์ธํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ๐ง Username..
Login์ด ์ฑ๊ณตํ์ ๋ ํ์ฒ๋ฆฌ ํ๋ ๋ฐฉ๋ฒ Spring Security๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๋ก๊ทธ์ธ์ ์์ฝ๊ฒ ๊ตฌํํ ์ ์๋ค. ๊ทธ๋ฌ๋ ๋ก๊ทธ์ธ ์ดํ, ํ ํฐ์ ๋ฐ๊ธํ๋ค๋๊ฐ ํ๋ ์ถ๊ฐ์ ์ธ ์ํฉ์ด ํ์ํ ๊ฒฝ์ฐ ์ด๋ป๊ฒ ํด๊ฒฐํ ์ ์๋์ง ์์๋ณด๊ฒ ๋ค. AuthenticationSuccessHandler ๊ตฌํ ํ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ๋งค์ฐ ๊ฐ๋จํ๋ฐ, Spring Security์ ์กด์ฌํ๋ AuthenticationSuccessHandler ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ธฐ๋ง ํ๋ฉด ๋๋ค. AuthenticationSuccessHandler ์ ์ด 2๊ฐ์ ๋ฉ์๋๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ ๊ทธ ์ค ํ๋๋ default ๋ฉ์๋์ด๋ค. ์ด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ Handler ํด๋์ค๋ฅผ ์๋กญ๊ฒ ์์ฑํ์. @Slf4j @Component public class CustomLo..
๋ณดํธ๋์ด ์๋ ๊ธ์
๋๋ค.
์์ฆ์ OAuth2๋ฅผ ์ฌ์ฉํ์ฌ ์์
๋ก๊ทธ์ธ์ ํตํด ๊ฐ์
์ด ๊ฐ๋ฅํ ์๋น์ค๋ค์ด ๊ต์ฅํ ๋ง๋ค. ์คํ๋ง ์ํ๋ฆฌํฐ์์๋ OAuth2๋ฅผ ์ด์ฉํ ์์
๋ก๊ทธ์ธ ๋ฐฉ์์ ์ง์ํ๋๋ฐ, ํ์๋ ๋งจ ์ฒ์ ์ด๋ฅผ ์ฌ์ฉํ ๋ ๋๋ฌด ์ด๋ ค์ ์๋ค. ์ง๊ธ๋ถํฐ ์ํ๋ฆฌํฐ์์ OAuht2๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง ์์๋ณด์. ์์กด์ฑ ๊ด๋ฆฌ ์ฐ์ OAuth2๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด OAuth2-client ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํด์ผ ํ๋ค. build.gradle ์ ๋ค์์ ์ถ๊ฐํ์. implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' oauth2Login() ์ ์๋๋ฐฉ์ WebSecurityConfigurerAdapter ๋ฅผ ์์๋ฐ์ Security Config ํ์ผ์์ oauth2 ๋ก๊ทธ์ธ..