Authorization Filter
๊ถํ ๊ณ์ธต
์น ๊ณ์ธต
URL์์ฒญ์ ๋ฐ๋ฅธ ๋ฉ๋ด/ํ๋ฉด ๋จ์์ ๋ ๋ฒจ ๋ณด์
/user
->request -> ROLE_USER
์๋น์ค ๊ณ์ธต
๋ฉ์๋์ ๊ฐ์ ๊ธฐ๋ฅ๋จ์์ ๋ ๋ฒจ ๋ณด์
user()
->invoke-> ROLE_USER
๋๋ฉ์ธ ๊ณ์ธต
๊ฐ์ฒด ๋จ์์ ๋ ๋ฒจ ๋ณด์
user
->write-> ROLE_USER
์ ์ธ์ ๋ฐฉ์
URL
WebSecurityConfigurerAdapter
๋ฅผ ์์๋ฐ์ ํด๋์ค์์ configure๋ฅผ ํตํด์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ธํด ์ค ์ ์๋ค.
๊ตฌ์ฒด์ ์ธ ๋ฒ์๋ฅผ ๊ฐ์ง url์ด ์์ ์์ผํ๋ค.
/shop
ํ์ ๋๋ฉ์ธ์ ๋ํด ๊ทธ ๋ฐ์ ์ธ์ฆ์ธํ
์ ๋ณด๋ฅผ ์ฌ์ฉํ๊ฒ ๋ค๋ ๋ป์ด๋ค. ์์์ antMathcer์ด ์๋ค๋ฉด ๋ชจ๋ ๊ฒฝ๋ก์ ๋ํด authorizeRequest()๋ฅผ ์ํ
authenticated()
์ธ์ฆ๋ ์ฌ์ฉ์ ์ ๊ทผ ํ์ฉ
fullyAuthenticated()
remberMe์ธ์ฆ ์ ์ธํ ์ธ์ฆ๋ ์ฌ์ฉ์ ์ ๊ทผ ํ์ฉ
permitAll()
๋ฌด์กฐ๊ฑด ์ ๊ทผ ํ์ฉ
denyAll()
๋ฌด์กฐ๊ฑด ์ ๊ทผ ํ์ฉ x
anonymous()
์ต๋ช ์ฌ์ฉ์ ์ ๊ทผ ํ์ฉ (์ธ์ฆ๋ ์ฌ์ฉ์๋ ์ต๋ช ์ฌ์ฉ์์ ์ ๊ทผ ๋ถ๊ฐ๋ฅ)
rememberMe()
remberMe๋ฅผ ํตํด ์ธ์ฆ๋ ์ฌ์ฉ์ ์ ๊ทผ ํ์ฉ
access(String) spEL ํํ์์ ํ๊ฐ๊ฐ true์ด๋ฉด ์ ๊ทผ ํ์ฉ
hasRole(String)
ํน์ ์ญํ ์ด ์๋ค๋ฉด ํ์ฉ (ROLE_ prefix์๋ต)
hasAuthority(String)
์ฃผ์ด์ง ๊ถํ์ด ์๋ค๋ฉด ํ์ฉ (ROLE_ prefix ํฌํจ)
hasAnyRole(String ...)
์ฃผ์ด์ง ๊ถํ์ด ์๋ค๋ฉด ์ ๊ทผ ํ์ฉ
hasAnyAuthority(String ...)
์ฃผ์ด์ง ๊ถํ์ค ํ๋๋ผ๋ ์๋ค๋ฉด ์ ๊ทผ ํ์ฉ
hasIpAddress(String)
์ฃผ์ด์ง IP ์ ๊ทผ ํ์ฉ
Mehtod
Controller์์ ์์ ์ด๋ ธํ ์ด์ ์ ์ด์ฉํ์ฌ ๊ฐ ๋ฉ์๋๋ณ๋ก ์ญํ ์ ๋ถ์ฌํด์ค ์ ์๋ค.
์ค์ ํด๋์ค์ @EnableGlobalMethodSecurity
๋ฅผ ์ด์ฉํด ์ ์ธํด์ฃผ์ด์ผ ํ๋ค.
๋์ ๋ฐฉ์
DB ์ฐ๋ ํ๋ก๊ทธ๋๋ฐ
URL
Method
ExceptionTranslationFilter
FilterSecifityIntercepter๊ฐ Filter์ ๋งจ ๋ง์ง๋ง์ ์์นํ๊ณ Exception์ Throwํ๋ค. ExceptionTranslationFilter๋ ์ด ํํฐ ์์ ์์นํด์ ์์ฒญ์ try~catch๋ก Intercepter๋ฅผ ๊ฐ์ธ ํธ์ถํ๊ณ ์๋ค.
AuthenticationException
์ธ์ฆ ์์ธ
AuthenticationEntryPoint
์ธํฐํ์ด์ค์ด๋ฉฐ ์ด๋ฅผ ๊ตฌํํ ๊ตฌํ์ฒด๋ฅผ Security๊ฐ ์ ๊ณตํ๊ณ ์ด๋ ๋ก๊ทธ์ธ ํ์ด์ง๋ก ์ด๋ํ๊ฑฐ๋, ์ค๋ฅ์ฝ๋ ์ ๋ฌ๋ฑ ์ํ (Customํ๊ณ ์ ํ๋ค๋ฉด ์ด๋ฅผ ๊ตฌํํ ๊ตฌํ์ฒด๋ฅผ ๋ง๋ค๋ฉด ๋๋ค.)
์ธ์ฆ ์์ธ๊ฐ ๋ฐ์ํ๊ธฐ์ ์ ์์ฒญ ์ ๋ณด๋ฅผ ์ ์ฅ
RequestCache : ์ฌ์ฉ์์ ์ด์ ์์ฒญ ์ ๋ณด๋ฅผ ์ธ์ ์ ์ ์ฅํ๊ณ ์ด๋ฅผ ๊บผ๋ด ์ค๋ ์บ์ ๋งค์ปค๋์ฆ
SavedRequest : ์ฌ์ฉ์๊ฐ ์์ฒญํ๋ request ํ๋ผ๋ฏธํฐ ๊ฐ๋ค, ๊ทธ ๋น์์ ํค๋๊ฐ๋ค ๋ฑ์ด ์ ์ฅ
AccessDeniedException
์ธ๊ฐ ์์ธ
AccessDeniedHandler
Anonymous์ด๊ฑฐ๋ RememberMe ์ธ์ฆ์ฌ์ฉ์์ ๊ฒฝ์ฐ AccessDeniedException์ด ๋ฐ์ํ์ง๋ง AccessDeniedHandler๋ก ๋ณด๋ด์ง ์๊ณ AuthenticationException์ผ๋ก ๋ณด๋ธ๋ค.
FilterSecurityInterceptor
๋ง์ง๋ง์ ์์นํ ํํฐ๋ก ์ธ์ฆ๋ ์ฌ์ฉ์์ ๋ํด ํน์ ์์ฒญ์ ์น์ธ/๊ฑฐ๋ถ ์ฌ๋ถ๋ฅผ ์ต์ข ์ ์ผ๋ก ๊ฒฐ์
์ธ์ฆ๊ฐ์ฒด ์์ด ์ ๊ทผ์ ์๋ํ ๊ฒฝ์ฐ AuthetnicationException
๋ฐ์์ ์ํค๊ณ ์ ๊ทผ๊ถํ์ด ์๋ค๋ฉด AccessDeniedException
์ ๋ฐ์์ํจ๋ค.
๊ถํ ์ฒ๋ฆฌ๋ฅผ AccessDecisionManager
์๊ฒ ๋งก๊ธด๋ค.
๊ณผ์
์์ฒญ์ด ๋ง์ง๋ง ํํฐ์ธ FilterSecurityInterceptor์๊ฒ ๋๋ฌ
์ธ์ฆ ์ฌ๋ถ ์ฒดํฌ ํ ์ธ์ฆ๋ ๊ฐ์ฒด๋ผ๋ฉด
SecurityMetaDataSource์์ ์์ฒญ ๋๋ฉ์ธ/์์์ ํ์ํ ๊ถํ/์ญํ ์ ๋ณด ์กฐํ
๋๋ฉ์ธ์ ํ์ํ ๊ถํ์ด ์กด์ฌํ๋ค๋ฉด AccessDecisionManager์๊ฒ ์ ๋ฌ
AccessDecisionManager์์ AccessDecisionVoter์๊ฒ ๊ถํ ์ฌ์ ์์ฒญ
AccessDecisionVoter๊ฐ ์ต์ข ์น์ธ ์ฌ๋ถ ๋ฐํ
์์ ์ ๊ทผ ํ์ฉ
AccessDecisionManager
์ ๊ทผ, ์ธ๊ฐ ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ์ธํฐํ์ด์ค๋ก ์ธ์ฆ๋ ์ฌ์ฉ์์ ๋ฆฌ์์ค ์ ๊ทผ ์ฌ๋ถ ํ๋จํ๊ณ , ์ ๊ทผ ์น์ธํ๋๋ฐ ์ ์ฑ ์ ๊ฒฐ์
AffirmativeBased: ์ ๊ทผ์ ์น์ธํ๋ voter๊ฐ 1๊ฐ ์ด์
ConsesusBased: ๊ณผ๋ฐ์
UnanimouseBased: ๋ชจ๋ voter๊ฐ ์น์ธ
Voter : ๋ง๊ทธ๋๋ ํฌํ์๋ก ์์ฌ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ๊ฐ์ฒด๋ค. Manager๋ ์ฌ๋ฌ๊ฐ์ Voter๋ฅผ ๊ฐ์ง ์ ์๋ค.
decide(authentication,object,configAttributes)
๋ฅผ ์ด์ฉํด Voter์๊ฒ ๊ถํ ํ๋จ์ ์ฌ์ฌ
AccessDecisionVoter
ํด๋น ์ฌ์ฉ์์ ์ธ์ฆlevel์ด ํน์ object ์ ๊ทผlevel์ ๋ง์กฑํ๋์ง ํ์ธ
๊ถํ ํ๋จ ์๋ฃ
Authentication : ์ธ์ฆ ์ ๋ณด(user)
FilterInvocation : ์์ฒญ ์ ๋ณด(antMathcer("/user"))
ConfigAttributes : ๊ถํ ์ ๋ณด (hasRole("USER"))
๊ฒฐ์ ๋ฐฉ์
ACCESS_GRANTED : ์น์ธ
ACCESS_DENIED : ๊ฑฐ์
ACCESS_ABSTAIN : ๋ณด๋ฅ
RoleVoter
AccessDecisionVoter ๊ตฌํ์ฒด์ค ํ๋๋ก ๋ฆฌ์์ค์ ์ ๊ทผํ๊ธฐ ์ํด ๊ถํ์ ์ฌ์ฉ์๊ฐ ์ง๋๊ณ ์๋์ง ํ์ธ
WebExpressionVoter
์น ์ํ๋ฆฌํฐ์์ ์ฌ์ฉํ๋ ๊ธฐ๋ณธ ๊ตฌํ์ฒด์ค ํ๋๋ก, SpELํํ์์ ๋ฐ๋ฅธ ์ ๊ทผ ์ฒ๋ฆฌ(ROLE_* ๋งค์น๋๋์ง ํ์ธ)
Last updated