- [email protected] / 1111
- [email protected] / 1111
- [email protected] / 1111
- ํ
์คํธ๋ฐ์ดํฐ ์ด๊ธฐํ ๋ก์ง
DataInitializer.java
- ์ดํ๋ฆฌ์ผ์ด์
์ด ์์ํ ๋ ๋ฆฌ์์ค๊ถํ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
- ๋ง์ฝ application.yml ์์
ddl_auto: create
๋ก ๋์ด ์๋ค๋ฉด DB ํ ์ด๋ธ์ด ๋น์ด์์ด์ url ๊ถํ๊ฒ์ฌ๊ฐ ๋์ํ์ง ์์ต๋๋ค. - ์ด ๊ฒฝ์ฐ
ddl_auto: update
๋ก ์ค์ ํ ํ ์ต์ด 1ํ ์๋ฒ๋ฅผ ๊ธฐ๋ํ์ฌ DB ๋ฐ์ดํฐ ์ด๊ธฐํ๋ฅผ ํ ํ์ ํ ์คํธ ํด์ผ ํฉ๋๋ค.
- ๋ง์ฝ application.yml ์์
- GET /
- GET /hello
- POST /login
Method | Resource | Role |
---|---|---|
GET | /api/hello/admin | ROLE_ADMIN |
GET | /api/hello/manager | ROLE_MANAGER |
GET | /api/hello/user | ROLE_USER |
class type | Login ์ฒ๋ฆฌ | Token ์ธ์ฆ |
---|---|---|
filter |
LoginAuthenticationFilter | JwtAuthenticationFilter |
provider |
LoginAuthenticationProvider | JwtAuthenticationProvider |
authentication |
UsernamePasswordAuthenticationToken | JwtAuthenticationToken |
๊ณตํต |
SecurityMemberContext |
- filter๋ SecurityConfig ์์ ์ค์ ๋๋ฉฐ, RequestMatcher์ ์ํด url ํจํด์ ๊ฒฐ์ ํฉ๋๋ค.
- provider์ supports ๋ฉ์๋์ ์ ์๋ token class๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฌ์ฉ๋ provider๊ฐ ์ ํด์ง๋๋ค.
// JwtAuthenticationFilter ์์ JwtAuthenticationToken ์ค์
@Override
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response)
throws AuthenticationException, IOException, ServletException {
String token = extractToken(request);
return this.getAuthenticationManager().authenticate(
new JwtAuthenticationToken(token));
}
// JwtAuthenticationProvider ์์ JwtAuthenticationToken.class ์ค์
@Override
public boolean supports(Class<?> authentication) {
return authentication.equals(JwtAuthenticationToken.class);
}
- ๋ก๊ทธ์ธ ์ฒ๋ฆฌ ์๋ฃ, ํ ํฐ์ธ์ฆ ์ฒ๋ฆฌ ์๋ฃ์ ๊ณตํต์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
- ์ด๋ ๊ฒ ์ฒ๋ฆฌํ๋ ์ด์ ๋ SecurityContext์์ ๋์ผํ ํ์ ์ ๊ฐ์ฒด๋ฅผ ๊บผ๋ด๊ธฐ ์ํจ์ ๋๋ค.
SecurityMemberContext memberContext = (SecurityMemberContext) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
- ์ด๋ ๊ฒ ์ค์ ์ ํ๋ฉด JPA์ ์ํ ์๋ audit ์ฒ๋ฆฌ์ ๋์ผํ ๋ก์ง์ผ๋ก memberId๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.
์๋ audit ์ฒ๋ฆฌ๋, insert/update ์ ๋ฑ๋ก์/์์ ์์ ๋ํ ํ์ id๋ฅผ ์๋ ์ธํ ํ๋ ๊ธฐ๋ฅ์ ๋๋ค.
FilterInvocationSecurityMetadataSource
๋ฅผ ๊ตฌํํฉ๋๋ค.
ResourceRole
ํ ์ด๋ธ์์ ๋ฆฌ์์ค๊ถํ์ ์กฐํํ์ฌLinkedHashMap<RequestMatcher, List<ConfigAttribute>>
์ผ๋ก ๋ฆฌํดํฉ๋๋ค.
- ์ดํ๋ฆฌ์ผ์ด์
์ด ๊ธฐ๋๋ ๋ DB๋ก๋ถํฐ ๋ฆฌ์์ค๊ถํ ์ ๋ณด(RESOURCE_ROLE)๋ฅผ ์กฐํํ์ฌ
LinkedHashMap
์ ๋ด์๋ก๋๋ค.
- ๋ฆฌ์์ค๊ถํ ์ ๋ณด๊ฐ ์กฐํ๋
LinkedHashMap
์ ๋์์ผ๋ก resource ์์ฒญ์ด ์์ ๊ฒฝ์ฐ ๊ถํ ๊ฒ์ฌ๋ฅผ ์ํํฉ๋๋ค. - ์์ ์ ๊ทผ์ ๋ํ ํ๋จ์
AccessDecisionManager
์ ๊ตฌํ์ฒด์ธAffirmativeBased
๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- Application ๋ก๋ฉ์ DB๋ก ๋ถํฐ ๋ฆฌ์์ค์ ๊ถํ ๊ด๊ณ๋ฅผ ์กฐํํ์ฌ
LinkedHashMap
์ ๋ด์๋๊ฒ ๋ฉ๋๋ค.- ๋ง์ฝ DB ์ ๋ณด๊ฐ ๋ณ๊ฒฝ ๋๋ค๋ฉด
Map
์ ์๋ ๋ฐ์ดํฐ๋ ์ด๋ป๊ฒ ๋ณ๊ฒฝํด์ผ ํ๋๊ฐ?- ๋์1.
reload
๋ฉ์๋๋ฅผ ๊ตฌํํ๊ณ , DB๊ฐ ๋ณ๊ฒฝ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ ์ฌ ํฉ๋๋ค.- ์๋ฒ๊ฐ ์ด์คํ ๋์ด ์๋ค๋ฉด ์ด๋ป๊ฒ ์ ํ์ํค์ง?
- ๋์2. ๋ชจ๋ url ํธ์ถ์ DB๋ฅผ ์กฐํํฉ๋๋ค.
- ์ฑ๋ฅ์ ์ผ๋ง๋ ์ํฅ์ ์ค๊น?
- ๋์3. ์ ์ ํ
cache
์ ํ์ฉ
- ๋์1.
- ๋ง์ฝ DB ์ ๋ณด๊ฐ ๋ณ๊ฒฝ ๋๋ค๋ฉด
- ADMIN > MANAGER > USER
- MANAGER ๋ก๊ทธ์ธ
- USER ๋ฆฌ์์ค: O
- ADMIN ๋ฆฌ์์ค: X (403 Forbidden)
- ๋ฐ๋์ ์๋์ ๊ฐ์ ํฌ๋งท์ ๋ฌธ์์ด๋ก ๋ฐํ ๋์ด์ผ ํ๋ค.
{๋ถ๋ชจ ๊ถํ๋ช
} > {์์ ๊ถํ๋ช
}
{์์ ๊ถํ๋ช
} > {์์ ๊ถํ๋ช
}
ROLE_ADMIN > ROLE_MANAGER
\nROLE_MANAGER > ROLE_USER
- ๊ณ์ธต ๊ถํ์ด ์ ์ฉ๋๋ ์์ ์
ApplicationRunner
์ ์ค์ ํ๋ค.
- ์ด๋ ํ ์์ฒญ์ด ๋ฐ์ํ๋ฉด
AbstractSecurityInterceptor
์์ ์ธ์ฆ ๋ฐ ๊ถํ ์ฌ์ฌ๋ฅผ ํ๋ค. PermitAllFilter
๋ฅผ ์ ์ฉํ๋ฉด ์ธ๊ฐ์ฒ๋ฆฌ๊ฐ ํ์ ์๋ ๋์์ ๊ด๋ฆฌํ๊ณ , ๋ฏธ๋ฆฌ ์ฒ๋ฆฌํด์ ๊ถํ ์ฌ์ฌ ์์ด ๋ฐ๋ก ํต๊ณผ ๋๋ค.- ์ด๋ ๊ฒ ํ๋ฉด
AbstractSecurityInterceptor
์ ์ ์ฒ๋ฆฌ๋๋ค.- ๊ถํ ์ฌ์ฌ๋ฅผ ํ ํ์๊ฐ ์๋ ๋์์ ๋ช ํํ๊ฒ ์ ๋ณํ๊ณ , ํ๋ก์ธ์ค๋ฅผ ์๋ตํ๋ค.
- ํจ์จ์ ์ด๋ค.
beforeInvocation
๋ฅผ ์ค๋ฒ๋ผ์ด๋ํ์ฌ ๋ก์ง์ ๊ฐ๋ฐํ๋ค.