๐ŸŒˆ [Section4] 2. [ Spring Security ] Security ๊ธฐ๋ณธ 1

ํ˜„์ฃผยท2022๋…„ 11์›” 22์ผ
0

bootcamp

๋ชฉ๋ก ๋ณด๊ธฐ
56/71

๐Ÿ“• ์˜ค๋Š˜ ๋ฐฐ์šด ๋‚ด์šฉ!

  • Spring Security
  • Spring Security ์ ์šฉ

โœ๏ธ Spring Security

  • Spring MVC ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ธ์ฆ(Authentication)๊ณผ ์ธ๊ฐ€(Authorization or ๊ถŒํ•œ ๋ถ€์—ฌ) ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋Š” ๋ณด์•ˆ ํ”„๋ ˆ์ž„์›Œํฌ
    โ €
    ( Spring MVC ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ณด์•ˆ์„ ์ ์šฉํ•˜๊ธฐ์œ„ํ•œ ์‚ฌ์‹ค์ƒ์˜ ํ‘œ์ค€ )

  • ํŠน์ • ๋ณด์•ˆ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๋งŒ์กฑ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ์˜ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์ด ์šฉ์ดํ•˜๊ณ  ์œ ์—ฐํ•œ ํ™•์žฅ์ด ๊ฐ€๋Šฅ

๐Ÿ’ก ์™œ ๊ตณ์ด Spring Security๋ฅผ ์‚ฌ์šฉํ• ๊นŒ?
โžœ Apache Shiro, OACC์™€ ๊ฐ™์€ Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ๋ณด์•ˆ ํ”„๋ ˆ์ž„ ์›Œํฌ๊ฐ€ ์กด์žฌํ•˜์ง€๋งŒ Spring Security๋งŒํ•œ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Œ
โ €
[Apache Shiro ์ฐธ๊ณ ] https://shiro.apache.org/
[OACC ์ฐธ๊ณ ] http://oaccframework.org/

โœ” Spring Security๋กœ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ณด์•ˆ ๊ฐ•ํ™” ๊ธฐ๋Šฅ

  • ๋‹ค์–‘ํ•œ ์œ ํ˜•(ํผ ๋กœ๊ทธ์ธ ์ธ์ฆ, ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ, OAuth 2 ๊ธฐ๋ฐ˜ ์ธ์ฆ, LDAP ์ธ์ฆ)์˜ ์‚ฌ์šฉ์ž ์ธ์ฆ ๊ธฐ๋Šฅ ์ ์šฉ

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‚ฌ์šฉ์ž์˜ ์—ญํ• (Role)์— ๋”ฐ๋ฅธ ๊ถŒํ•œ ๋ ˆ๋ฒจ ์ ์šฉ

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ ์ œ์–ด

  • ๋ฏผ๊ฐํ•œ ์ •๋ณด์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™”

  • SSL ์ ์šฉ

  • ์ผ๋ฐ˜์ ์œผ๋กœ ์•Œ๋ ค์ง„ ์›น ๋ณด์•ˆ ๊ณต๊ฒฉ ์ฐจ๋‹จ

โœ”๏ธ Principal (์ฃผ์ฒด)

  • ์ธ์ฆ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜ํ–‰๋œ ์‚ฌ์šฉ์ž์˜ ๊ณ„์ • ์ •๋ณด
    Ex. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž, ๋””๋ฐ”์ด์Šค ๋˜๋Š” ์‹œ์Šคํ…œ ๋“ฑ

โœ”๏ธ Authentication (์ธ์ฆ)

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋ณธ์ธ์ด ๋งž์Œ์„ ์ฆ๋ช…ํ•˜๋Š” ์ ˆ์ฐจ
    โžœ ์ด๋ฅผ ์œ„ํ•ด Credential(์‹ ์› ์ฆ๋ช… ์ •๋ณด)์ด ํ•„์š”

    ๐Ÿ’ก ์‹ ์› ์ฆ๋ช… ์ •๋ณด (Credential)

    • ์‚ฌ์šฉ์ž๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ ์ •๋ณด
      Ex. ์ฃผ๋ฏผ๋“ฑ๋ก์ฆ, ํŒจ์Šค์›Œ๋“œ ๋“ฑ

โœ”๏ธ 2 ํŒฉํ„ฐ(factor) ์ธ์ฆ

  • ์ธ์ฆ์„ 2๋ฒˆ ๋ฐ›์•„์•ผ ํ•˜๋Š” ์ธ์ฆ
    Ex. ์˜จ๋ผ์ธ ๋ฑ…ํ‚น - 1์ฐจ ์ธ์ฆ : ๊ณต์ธ์ธ์ฆ์„œ / 2์ฐจ ์ธ์ฆ : OTP

โœ”๏ธ Authorization (์ธ๊ฐ€ ๋˜๋Š” ๊ถŒํ•œ ๋ถ€์—ฌ)

  • Authentication(์ธ์ฆ)์ด ์ •์ƒ์ ์œผ๋กœ ์ˆ˜ํ–‰๋œ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ•˜๋‚˜ ์ด์ƒ์˜ ๊ถŒํ•œ(authority)์„ ๋ถ€์—ฌํ•˜์—ฌ ํŠน์ • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํŠน์ • ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ—ˆ๊ฐ€ํ•˜๋Š” ๊ณผ์ •
    Ex. ๋น„ํ–‰๊ธฐ ์ขŒ์„ / ๊ทน์žฅ ํ‹ฐ์ผ“๋ณ„ ์ขŒ์„ ๋“ฑ

  • ๋ฐ˜๋“œ์‹œ Authentication ๊ณผ์ • ์ดํ›„ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•จ

  • ๊ถŒํ•œ์€ ๋ณดํ†ต ์—ญํ• (Role) ํ˜•ํƒœ๋กœ ๋ถ€์—ฌ
    โžœ URL์— ์ ‘๊ทผํ•  ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธ
    Ex. ๊ด€๋ฆฌ์ž / ์‚ฌ์šฉ์ž

โœ”๏ธ Access Control (์ ‘๊ทผ ์ œ์–ด)

  • ์‚ฌ์šฉ์ž๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๋Š” ํ–‰์œ„๋ฅผ ์ œ์–ดํ•˜๋Š” ๊ฒƒ

๐Ÿ˜œ ์‹ค์Šต

  • projects - be-template-hello-spring-security

โ— ์ด๋ฒˆ์—๋Š” SSR(Server Side Rendering) ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋œ Hello Spring Security ์ƒ˜ํ”Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ด์šฉํ•˜์—ฌ ์‹ค์Šต์„ ์ง„ํ–‰ํ•จ
โ €
โžœ Spring Security์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ์™€ ๋™์ž‘ ๋ฐฉ์‹์„ ์ดํ•ดํ•˜๊ธฐ ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ์‹์ด ๋ฐ”๋กœ ์„œ๋ฒ„์—์„œ HTML์„ ๋งŒ๋“ค์–ด ํด๋ผ์ด์–ธํŠธ ์ชฝ์œผ๋กœ ๋‚ด๋ ค์ฃผ๋Š” SSR(Server Side Rendering) ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ
โ €
โ—์‹ค์Šต์—์„œ๋Š” Spring Security๋ฅผ ์ ์šฉํ•ด ๋ชจ๋“  ์‚ฌ์šฉ์ž๋“ค์ด ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ํ™”๋ฉด์ด ๋˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ธฐ๋งŒ ํ•˜๋ฉด๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌ์ฒด์ ์ธ ์ปจํ…์ธ ๊ฐ€ ์—†์„ ์ˆ˜ ์žˆ์Œ !
โ €
โœ”๏ธ SSR(Server Side Rendering) ๋ฐฉ์‹
โžœ ์„ธ์…˜ ๊ธฐ๋ฐ˜์˜ ํผ ๋กœ๊ทธ์ธ ๋ฐฉ์‹์„ ์ ์šฉํ•˜๊ธฐ ๊ฐ€์žฅ ์ ํ•ฉํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
โ €
โœ”๏ธ ํผ ๋กœ๊ทธ์ธ ๋ฐฉ์‹
โžœ Spring Security์— ์ฒ˜์Œ ์ž…๋ฌธํ•˜๋Š” ์ž…๋ฌธ์ž๋“ค์ด Spring Security๋ฅผ ์ดํ•ดํ•˜๊ธฐ์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ์ธ์ฆ ๋ฐฉ์‹

โœ… ์ด์ „ ์‹ค์Šต๊นŒ์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์— ์ ์šฉ๋˜์ง€ ์•Š์•˜๋˜ ๊ฒƒ

  • ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ(์ธ์ฆ, Authentication)์ด ์—†์Œ
    โžœ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ API๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์–ผ๋งˆ๋“ ์ง€ ์ •๋ณด ์กฐํšŒ ๊ฐ€๋Šฅ

  • API์— ๋Œ€ํ•œ ๊ถŒํ•œ ๋ถ€์—ฌ(์ธ๊ฐ€, Authorization) ๊ธฐ๋Šฅ์ด ์—†์Œ
    โžœ ์†๋‹˜์ด ๋งˆ์Œ๋Œ€๋กœ ์ปคํ”ผ ์ •๋ณด๋ฅผ ๋“ฑ๋ก ๊ฐ€๋Šฅ

  • ์›น ๋ณด์•ˆ ์ทจ์•ฝ์ ์— ๋Œ€ํ•œ ๋Œ€๋น„๊ฐ€ ์ „ํ˜€ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์•˜์Œ
    โžœ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ˜‘ํ•˜๋Š” ์„ธ์…˜ ๊ณ ์ • ๊ณต๊ฒฉ, ํด๋ฆญ์žฌํ‚น ๊ณต๊ฒฉ, CSRF ๋“ฑ์˜ ๋ณด์•ˆ ์ทจ์•ฝ์ ์— ๋Œ€ํ•œ ๊ณ ๋ ค๊ฐ€ ์ „ํ˜€ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์€ ์ƒํƒœ

โœ” Spring Security ์ ์šฉ

  • build.gradel ํŒŒ์ผ์— ์•„๋ž˜์˜ ์˜์กด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€
    implementation 'org.springframework.boot:spring-boot-starter-security'

โžœ ์ด๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์ „์—” ์‹ค์Šต ๋‚ด์šฉ์„ ์‹คํ–‰ํ•˜๊ณ  localhost:8080์— ์ ‘์†ํ–ˆ์„ ๋•Œ ๋ˆ„๊ตฌ๋‚˜ ์ ‘์†์ด ๊ฐ€๋Šฅํ•œ ๋ฐ‹๋ฐ‹ํ•œ ํ™”๋ฉด์ด์—ˆ๋Š”๋ฐ,
์ถ”๊ฐ€ํ•œ ํ›„์—๋Š” Spring Security์˜ ์ž๋™ ๊ตฌ์„ฑ์„ ํ†ตํ•ด ๋””ํดํŠธ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๊ฐ€ ๋งŒ๋“ค์–ด์ ธ ๊ทธ ํ™”๋ฉด์—์„œ ๋กœ๊ทธ์ธ์„ ํ•ด์•ผ๋งŒ ํŽ˜์ด์ง€์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ํ•จ

๐Ÿ’ก ํšŒ์› ๋“ฑ๋ก ์ „์— ์ด ํ™”๋ฉด์„ ์‚ฌ์šฉํ•ด๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด,
Spring Security์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ๋””ํดํŠธ ๋กœ๊ทธ์ธ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ !
โ €

  • Username: user ์ž…๋ ฅ
  • Password: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ ์‹œ ๋งˆ๋‹ค ์ถœ๋ ฅ๋˜๋Š” ๋กœ๊ทธ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅ

    โฌ‡๏ธ ์•„๋ž˜์˜ ๋กœ๊ทธ์ธ์„ ํ•ด์•ผ์ง€๋งŒ ์ž๊ฒฉ ์ฆ๋ช…์— ์„ฑ๊ณตํ•˜์—ฌ ์šฐ๋ฆฌ๊ฐ€ ์›๋ž˜ ๋ณด๋˜ ํ™”๋ฉด์„ ๋ณผ ์ˆ˜ ์žˆ์Œ !

    โ €โ €
  • But, ์ด ๋ฐฉ์‹์€ ์•„๋ž˜์˜ ๋ฌธ์ œ์ ๋•Œ๋ฌธ์— ์‹ค๋ฌด์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ์—” ๋ฌด๋ฆฌ
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋งค๋ฒˆ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ํŒจ์Šค์›Œ๋“œ ๋ฐ”๋€œ
    • ํšŒ์› ๊ฐ์ž์˜ ์ธ์ฆ ์ •๋ณด๋กœ ๋กœ๊ทธ์ธ ๋ถˆ๊ฐ€
      โ €
      โžœ Spring Security์˜ Configuration์œผ๋กœ ์›ํ•˜๋Š” ์ธ์ฆ ๋ฐฉ์‹ ์„ค์ • ๊ฐ€๋Šฅ

โœ” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™์„ ํ†ตํ•œ ๋กœ๊ทธ์ธ ์ธ์ฆ

  • InMemory ๋ฐฉ์‹์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ์ •๋ณด๊ฐ€ ๋ชจ๋‘ ์‚ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์— ํšŒ์› ์ •๋ณด๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์—์„œ ๊ด€๋ฆฌ

  • ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•˜์ง€๋งŒ ๊ทธ ์ค‘ ํ•˜๋‚˜์ธ Custom UserDetailsService ๋ฅผ ์ด์šฉํ•  ๊ฒƒ์ž„

    ๐Ÿ’ก Spring Security์—์„œ๋Š” ์ธ์ฆ์„ ์‹œ๋„ํ•˜๋Š” ์ฃผ์ฒด๋ฅผ User๋ผ๊ณ  ๋ถ€๋ฆ„
    (๋น„์Šทํ•œ ์˜๋ฏธ๋กœ Principal๋„ ์žˆ์Œ)


    โœ”๏ธ Principal
    โžœ User์˜ ๋” ๊ตฌ์ฒด์ ์ธ ์ •๋ณด ์˜๋ฏธ
    ( ์ผ๋ฐ˜์ ์œผ๋กœ Spring Security์—์„œ์˜ Username์„ ์˜๋ฏธ )

  1. SecurityConfigurationV2 ํด๋ž˜์Šค ์ถ”๊ฐ€
    โžœ SecurityConfigurationV1์—์„œ Memory์— ์ง์ ‘ ์ €์žฅํ•˜๋Š” userDetailsService() ๋ฉ”์„œ๋“œ ์ œ๊ฑฐ
    PasswordEncoder ์ฐธ๊ณ 
    bcrypt ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฐธ๊ณ 
    Clickjacking ๊ณต๊ฒฉ ์ฐธ๊ณ  1
    Clickjacking ๊ณต๊ฒฉ ์ฐธ๊ณ  2

  2. JavaConfigurationV2 ํด๋ž˜์Šค ์ถ”๊ฐ€
    โžœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— User์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด MemberService ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„ ํด๋ž˜์Šค๋ฅผ DBMemberService๋กœ ๋ณ€๊ฒฝ

  3. DBMemberServiceV2 ํด๋ž˜์Šค ์ถ”๊ฐ€
    โžœ DBMemberServiceV1 + ํšŒ์› ๊ฐ€์ž… ์‹œ, User ์˜ ๊ถŒํ•œ ์ •๋ณด(Role)๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๋Š” ์ฝ”๋“œ

  4. HelloUserDetailsServiceV1 ํด๋ž˜์Šค ์ถ”๊ฐ€
    โžœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์กฐํšŒํ•œ User ์˜ ์ธ์ฆ ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ธ์ฆ์„ ์ฒ˜๋ฆฌํ•˜๋Š” Custom UserDetailsService
    โ €
    โžœ InMemory User ๋“ฑ๋กํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ–ˆ๋˜ InMemoryUserDetailsManager๋Š” UserDetailsManager ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„์ฒด์ด๊ณ ,
    UserDetailsManager๋Š” UserDetailsService๋ฅผ ์ƒ์†ํ•˜๋Š” ํ™•์žฅ ์ธํ„ฐํŽ˜์ด์Šค์ž„

โ— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ User ์˜ ์ธ์ฆ ์ •๋ณด๋งŒ Spring Security ์—๊ฒŒ ๋„˜๊ฒจ์ฃผ๊ณ ,
์ธ์ฆ ์ฒ˜๋ฆฌ๋Š” Spring Security๊ฐ€ ๋Œ€์‹ ํ•ด์คŒ

  1. HelloAuthorityUtils ํด๋ž˜์Šค ์ถ”๊ฐ€
    โžœ HelloUserDetailsService์—์„œ Role ๊ธฐ๋ฐ˜์˜ User ๊ถŒํ•œ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

  2. application.yml ํŒŒ์ผ์— ๊ด€๋ฆฌ์ž ์ด๋ฉ”์ผ ์ฃผ์†Œ ์ •์˜
    ( ์‹ค๋ฌด์—์„  ์ด๋ ‡๊ฒŒ ์•ˆํ•จ )

๐Ÿ”Š ์—ฌ๊ธฐ๊นŒ์ง€ ํ•ด๋„ postman ์œผ๋กœ ๋ฉค๋ฒ„ ๋“ฑ๋ก ํ›„ H2๋กœ ๋“ค์–ด๊ฐ€์„œ DB๋ฅผ ๋ณด๋ฉด PASSWORD ์ปฌ๋Ÿผ์˜ ์ •๋ณด๊ฐ€ ์•”ํ˜ธํ™”๊ฐ€ ๋˜์–ด ๋“ฑ๋ก๋˜์–ด ์žˆ๋Š” ๊ฒƒ ํ™•์ธ ๊ฐ€๋Šฅ !

++ ์กฐ๊ธˆ ๋” ๊น”๋”ํ•œ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€๋กœ

  1. HelloUserDetailsServiceV2 ํด๋ž˜์Šค ์ถ”๊ฐ€
    ( HelloUserDetailsServiceV1 ์˜ ๋ช‡ ๋ถ€๋ถ„ ๊ฐœ์„  )

  2. User์˜ Role์„ DB์—์„œ ๊ด€๋ฆฌํ•˜๊ธฐ

    8-1. Member ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค์— User ๊ถŒํ•œ ์ •๋ณด ๋งคํ•‘
    โžœ @ElementCollection ์• ๋„ˆํ…Œ์ด์…˜ ์ถ”๊ฐ€ํ•˜์—ฌ ๋”ฐ๋กœ ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค ๋งŒ๋“ค์ง€ ์•Š๊ณ  ๋งคํ•‘

    8-2. DBMemberServiceV2 ํด๋ž˜์Šค์— ์ฝ”๋“œ ์ถ”๊ฐ€
    โžœ ํšŒ์› ๋“ฑ๋ก ์‹œ, ํšŒ์›์˜ ๊ถŒํ•œ ์ •๋ณด๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๋Š” ์ฝ”๋“œ ์ถ”๊ฐ€

    8-3. HelloAuthorityUtils ํด๋ž˜์Šค์— ์ฝ”๋“œ ์ถ”๊ฐ€
    โžœ DB ์ €์žฅ์šฉ createRoles() ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

  3. ๋กœ๊ทธ์ธ ์ธ์ฆ ์‹œ, User์˜ ๊ถŒํ•œ ์ •๋ณด๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์กฐํšŒํ•˜๋Š” ์ž‘์—…

    9-1. HelloUserDetailsServiceV3 ํด๋ž˜์Šค ์ถ”๊ฐ€
    โžœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ MEMBER_ROLES ํ…Œ์ด๋ธ”์—์„œ ์กฐํšŒํ•œ Role ๊ธฐ๋ฐ˜์œผ๋กœ
    User ์˜ ๊ถŒํ•œ ๋ชฉ๋ก(List<GrantedAuthority>)์„ ์ƒ์„ฑํ•˜๋Š” ๋กœ์ง ์ถ”๊ฐ€

    9-2. HelloAuthorityUtils ํด๋ž˜์Šค์— ์ฝ”๋“œ ์ถ”๊ฐ€
    โžœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์กฐํšŒํ•œ Role ์ •๋ณด ๊ธฐ๋ฐ˜์œผ๋กœ User ์˜ ๊ถŒํ•œ ๋ชฉ๋ก ์ƒ์„ฑํ•˜๋Š” createAuthorities(List<String> roles) ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

    โžœ ๊ธฐ์กด์—๋Š” application.yml ํŒŒ์ผ์˜ mail.address.admin ํ”„๋กœํผํ‹ฐ์— ์ •์˜๋œ ๊ด€๋ฆฌ์ž์šฉ ์ด๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ด€๋ฆฌ์ž Role ์ถ”๊ฐ€ํ–ˆ์ง€๋งŒ,
    ์ด์ œ๋Š” ๊ทธ๋ƒฅ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ฐ€์ง€๊ณ  ์˜จ Role ๋ชฉ๋ก(List<String> roles)์„ ๊ทธ๋Œ€๋กœ ์ด์šฉํ•ด์„œ ๊ถŒํ•œ ๋ชฉ๋ก(authorities)์„ ๋งŒ๋“ค๋ฉด ๋จ

๐Ÿ”Š ์—ฌ๊ธฐ๊นŒ์ง€ ํ•˜๋ฉด ํšŒ์›๊ฐ€์ž… ํ›„, ๋กœ๊ทธ์ธ๊นŒ์ง€ ์„ฑ๊ณต ๊ฐ€๋Šฅ !

โœ” Custom AuthenticationProvider ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

โžœ Spring Security ๊ฐ€ ๋กœ๊ทธ์ธ ์ธ์ฆ์„ ๋Œ€์‹  ํ•ด์ฃผ์ง€๋งŒ ํ๋ฆ„์˜ ์ดํ•ด๋ฅผ ์œ„ํ•ด ์ง์ ‘ ๋งŒ๋“œ๋Š” ์ธ์ฆ ์ฒ˜๋ฆฌ ๋กœ์ง์ž„

  1. HelloUserAuthenticationProvider ํด๋ž˜์Šค ์ถ”๊ฐ€
    • AuthenticationProvider ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„ ํด๋ž˜์Šค
      โ €
    • AuthenticationProvider - Spring Security ์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ ์ธ์ฆ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž์ธ์ง€์— ๋Œ€ํ•œ ์ธ์ฆ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” Spring Security ์ปดํฌ๋„ŒํŠธ

SSR ๋ฐฉ์‹ Controller ๊ตฌํ˜„ ๋ฐฉ์‹ ์ฐธ๊ณ 
Ant Pattern ์ฐธ๊ณ 
XML Name Space ์ฐธ๊ณ 


๐ŸŒˆ ๋Š๋‚€์ 

์œผ์•… ์ ์šฉํ•˜๋Š”๊ฒŒ ๋„˜๋‚˜ ์–ด๋ ต๋‹ค.
์–‘๋„ ๋„ˆ๋ฌด ๋งŽ์•„์„œ ์ดํ•ด๋„ ์–ด๋ ค์›Œ์„œ ์•„์ง๊นŒ์ง€ ๋ธ”๋กœ๊ทธ ์–ด๋–ป๊ฒŒ ์จ์•ผํ• ์ง€ ๊ฐ์„ ๋ชป์žก๋Š” ์ค‘ ใ… ใ… 
๋” ์ดํ•ดํ•˜๊ณ  ์ฃผ๋ง๊นŒ์ง€ ์ˆ˜์ • / ๋ณด์™„ ํ•ด์•ผ๊ฒ ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€