2021. 12. 3. 16:47ใSpring
์ด๋ฒ์๋ Spring Security ์์ JDBC๋ฅผ ์ฌ์ฉํด์ ๋ก๊ทธ์ธ ์ฒ๋ฆฌ๋ฅผ ํด๋ณผ ์์ ์ด๋ค.
https://hyejin.tistory.com/281
์ฌ๊ธฐ์ ํ๋ ๋ฐฉ์์ InMemory ๋ฐฉ์์ผ๋ก
id์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ง์ ์์ฑํ๋ ๋ฐฉ์์ด๋ค.
1๏ธโฃ root-context.xml์ dataSource ๋น ์ค์
์ด๋ฒ์๋ JDBC๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ pom.xml์ jdbc ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํด์ฃผ๊ณ ,
root-context.xml์ DataSource ๋น์ ์ค์ ํ๋ค.
(root-context.xml์ ์ค์ ํ๋ ์ด์ ๋ ๋ค๋ฅธ ์ค์ ํ์ผ์ธ security-context.xml์์ ์ฌ์ฉ(๊ณต์ )ํด์ผํ๊ธฐ ๋๋ฌธ์ด๋ค.)
2๏ธโฃ ํ ์ด๋ธ ์์ฑํ๊ธฐ
JDBC๋ฅผ ์ด์ฉํ ์ธ์ฆ/๊ถํ ์ฒดํฌ ๋ฐฉ์์ผ๋ก๋ ์ฐ์ Spring์์ ์ง์ ๋ ํ์์ ํ ์ด๋ธ ์์ฑํ๋ ๋ฐฉ์๊ณผ
๊ธฐ์กด์ ์์ฑ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ด์ฉํ๋ ๋ฐฉ์์ด ์๋ค.
- Spring Security๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ์์ ํ ์ด๋ธ
์ด ํ ์ด๋ธ์ด Spring์์ ์ง์ ๋ ํ์์ ํ ์ด๋ธ ์์ฑ์ด๋ค! (ํ ์ด๋ธ๋ช , ์ปฌ๋ผ๋ช ๋ฑ ๊ผญ ๊ฐ๊ฒ ์์ฑํด์ผํ๋ค.)
๊ทธ๋ฆฌ๊ณ security-context.xml์ <jdbc-user-service>๋ฅผ ์ถ๊ฐํ๊ณ , dataSource๋ฅผ ์ฌ์ฉํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋์์ ํ์ธํ๋ฉด ๋๋๋ฐ
์ด์ passwordEncoder๋ฅผ ํตํด ํจ์ค์๋ ์ธ์ฝ๋ฉ์ ์ฒ๋ฆฌํด์ผํ๋ค.
๊ทธ๋ฆฌ๊ณ PasswordEncoder ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค๋ฅผ ์์ฑํ๋ค.
๊ทธ๋ฆฌ๊ณ security-context.xml์ ๋น ์์ฑํ๊ณ ,
passwordEncoder ๋น ๋ฑ๋ก ํด์ค๋ค.
- ๊ธฐ์กด์ ์์ฑ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด์ฉํ๋ ๋ฐฉ์
์ด๋ ๊ฒ tbl_member์ tbl_member_auth๋ก ํ ์ด๋ธ์ ์์ฑํด์ค๋ค.
์ด๋ ๊ฒ ๊ธฐ์กด์ ํ์ ๊ด๋ฆฌ ํ ์ด๋ธ์ด ์๋ค๊ณ ๊ฐ์ ํ๋ฉด spring-security์์๋ ์ง์ ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ฃผ๋ ์์ ์ ํตํด ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
<security:jdbc-user-service>ํ๊ทธ์ <users-by-username-query>์ <authorities-by-username-query> ํํฌ์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ BcryptPasswordEncoder ๋ฅผ ํตํด ์ํธํ ์ฒ๋ฆฌ๋ฅผ ํด์ค ๊ฒ์ด๋ค.
โ bcrypt๋ ๋ํ์ ์ธ ์ํธ ์ธ์ฝ๋ฉ ์ ์ฉ ํด์ ํจ์๋ก ํน์ ํจ์ค์๋ ์ํธํ ๋ฐ ์ํธํ๋ ํจ์ค์๋ ์ฒดํฌ๊ฐ ๊ฐ๋ฅํ๊ณ , ์ญ์ผ๋ก ์๋ ํจ์ค์๋๋ก๋ ๋ชป๋๋ฆฐ๋ค๋ ํน์ง์ด์๋ค.
BCryptPasswordEncoder๋ฅผ ๋น ์ค์ ํด์ฃผ๊ณ ,
<security:authentication-manager> ํ๊ทธ์์ ์ถ๊ฐํด์ค๋ค.
tbl_member์ tbl_member_auth์ ์ฌ์ฉ์๋ค์ ์์์ ์ถ๊ฐํ๊ณ ,
๋ก๊ทธ์ธ์ ํด์ค๋ค.
์ด๋ ๊ฒ /sample/admin ์ ์ํ๋ฉด ๋ก๊ทธ์ธ ์ฐฝ์ด ๋จ๊ณ
tbl_member์ ์ ์ฅ๋ ์์ด๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํ๋ค.
์ ์์ ์ผ๋ก ๋ก๊ทธ์ธ๋๋๊ฑธ ํ์ธํ ์ ์๋ค.