
์ด ํ๋ก์ ํธ๋ ์ฌ์ฉ์๊ฐ ์์ ๋ก๊ทธ์ธ์ ํตํด ๊ฐํธํ๊ฒ ๊ฐ์ ํ๊ณ , ๊ฒ์๊ธ์ ์์ฑํ๊ณ ๊ด๋ฆฌํ ์ ์๋ ๊ฒ์ํ ์๋น์ค๋ฅผ ๊ฐ๋ฐํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
ํด๋ผ์ด์ธํธ๋ ์ด๋ฉ์ผ, ํจ์ค์๋, ๋๋ค์์ ์ ๋ ฅ ๋ฐ์ ์๋ฒ๋ก ํด๋น ํ์ ์ ๋ณด๋ฅผ ์ ์กํ์ฌ ๋ฑ๋กํฉ๋๋ค. ์ด๋ฉ์ผ ์ค๋ณต ํ์ธํ๊ณ ๋น๋ฐ๋ฒํธ๋ฅผ ์ํธํํ์ฌ ์ ์ฅํฉ๋๋ค.
http.formLogin(login -> login.loginPage("/member/login"));fetch ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ajax ๋ก ์๋ฒ์ ์ ์กํ๊ณ ์๋ฒ์์๋ ์ด๋ฉ์ผ ๊ฐ์ ๋ฐ์ ํ์ฌ ์ ์ฅ๋์ด ์๋ ์ด๋ฉ์ผ๊ณผ ๋น๊ตํฉ๋๋ค.BCryptPasswordEncoder ๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋ฐ๋ฒํธ ์ ์ฅ ์ ์ํธํ๋ ์ฑ๋ก ์ ์ฅํฉ๋๋ค.
!https://velog.velcdn.com/images/kpo12345/post/8b44a1bb-42c0-43d4-a10e-5e34581b1556/image.png
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.csrf(csrf -> csrf.disable())
.formLogin(login -> login.loginPage("/member/login"))
.authorizeHttpRequests(authorize -> authorize
.anyRequest()
.permitAll()
)
// OAuth2 ๋ก๊ทธ์ธ ๊ตฌ์ฑ์ ์ํ ์ค์ ๊ฐ์ ธ์ด
.oauth2Login(oauth2 -> oauth2
// ์ฌ์ฉ์ ์ ๋ณด ์๋ํฌ์ธํธ์ ๋ํ ์ค์ ์ถ๊ฐ
.userInfoEndpoint(infoEndpoint ->
// ์ฌ์ฉ์ ์๋น์ค ๊ตฌ์ฑ(๋ก๊ทธ์ธ ์ฑ๊ณต ํ ์ฌ์ฉ์ ์ ๋ณด ์ฒ๋ฆฌ)
infoEndpoint.userService(oauth2UserService)));
return http.build();
}
response ์ ํ์์ด Map์ด๊ธฐ ๋๋ฌธ์ Map์ ์ฌ์ฉํฉ๋๋ค.
์์ : ํด๋ผ์ด์ธํธ๋ ํน์ ํ์์ ์ ์ฅ๋ ์ด๋ฉ์ผ, ๋๋ค์์ ๋ฐ์์์ ์์ ํ ๋ถ๋ถ(ํจ์ค์๋, ๋๋ค์)์ ์์ ํ ํ ์๋ฒ๋ก ์ ์กํฉ๋๋ค. ์๋ฒ๋ ์ด๋ฅผ ๋ฐ์ ํ์ ์ ๋ณด๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
ํํด : ํด๋ผ์ด์ธํธ๋ ํ์ฌ ์ฌ์ฉ์๊ฐ ์ธ์ฆ๋ ์ฌ์ฉ์์์ ํ์ธํ ํ, ํํด ์์ฒญ์ ์๋ฒ๋ก ๋ณด๋
๋๋ค. ์๋ฒ๋ POST ์์ฒญ์ผ๋ก ํด๋น ํ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ญ์ ํฉ๋๋ค.

ํด๋ผ์ด์ธํธ๋ ์ ๋ชฉ, ๋ณธ๋ฌธ์ ์์ฑํ๊ณ ํด๋น ๋ด์ฉ์ ์๋ฒ๋ก ์ ๋ฌํฉ๋๋ค.
form action="/add" method="post"
์๋ฒ๋ ๊ธ ์์ฑํ ํ์์ด ๋ก๊ทธ์ธํ ํ์์ด ๋ง๋ค๋ฉด ์ ๋ชฉ, ๋ด์ฉ, ๊ธ ์์ฑ ์๊ฐ, ๋๋ค์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํฉ๋๋ค.

๊ธ ์์ : ์๋ฒ๋ก๋ถํฐ ํด๋น ๊ฒ์๊ธ์ ์กฐํํ๊ณ ์กฐํ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ๋ธ์ ๋ฃ๊ณ ํฌ์๋ฉํฉ๋๋ค. ํด๋ผ์ด์ธํธ์์ ์์ ํ ๋ถ๋ถ์ ์์ ํ ํ ๋ค์ ์๋ฒ๋ก POST ์์ฒญ์ ๋ณด๋ด ์์ฑ์ ํ์ธ ํ ์
๋ฐ์ดํธํฉ๋๋ค.
๊ธ ์ญ์ : ๊ฒ์๊ธ ์์ฑ์๊ฐ ๋ง๋ ์ง ํ์ธ ํ POST ์์ฒญ์ผ๋ก ํด๋น ๊ฒ์๊ธ ์ญ์ ํฉ๋๋ค.

์์ฑ๋ ๋ชจ๋ ๊ธ์ ์กฐํํ์ฌ ๋ชจ๋ธ์ ๋ฃ๊ณ JSP๋ก ํฌ์๋ํฉ๋๋ค.
page : ํ์ด์ง ๋ฒํธ๋ฅผ ๋ํ๋ด๋ ํ๋ผ๋ฏธํฐ๋ก ํ์ฌ ํ์ด์ง, ๋งจ ์ฒ์, ์ด์ , ๋ค์, ๋งจ ๋์ ํ์ํ์ฌ ๋ํ๋
๋๋ค.