Spring Security๋ฅผ ๊ตฌํํ๋ค๋ณด๋ฉด filter์ interceptor๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
ํํฐ์ ์ธํฐ์ ํฐ์ ๋ํ ๊ฐ๋ ์ ์ดํดํ๋ฉด Spring Security ๊ณผ์ ์ ํ์ ํ๊ธฐ ์ฌ์ธ ๊ฒ์ด๊ธฐ์ ๊ธฐ๋กํ๋ค!
โจ ์ฉ๋ - ๊ณตํต๊ด์ฌ์ฌํญ (Cross-cutting concern)
๐ ์น ์๋น์ค์์ ๋ก๊ทธ์ธ์ ํด์ผ ๋ค์ํ ๊ธฐ๋ฅ์ ์ด์ฉํ ์ ์์ผ๋ฉฐ ๋ก๊ทธ์ธ ์ฌ๋ถ์ ๋ฐ๋ผ ์ ๊ทผํ ์ ์๋ ํ์ด์ง๊ฐ ๋ค๋ฅด๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ก๊ทธ์ธ์ด ํ์ํ ๋ชจ๋ ์ปจํธ๋กค๋ฌ ๋ก์ง์ ๋ก๊ทธ์ธ๊ณผ ๊ด๋ จ๋ ์ฝ๋๋ฅผ ์์ฑํด์ผํ ํ ๋ฐ... ์ด๋ ๊ฒ ๋๋ค๋ฉด ์ฝ๋๊ฐ ์ค๋ณต๋ ๊ฒ์ด๊ณ ๋ณต์กํด์ง ๊ฒ์ด๋ค.
๋ง์ ๋ก์ง์์ ๊ณตํต์ผ๋ก ๊ด์ฌ ์๋ ๋ถ๋ถ์ ๊ณตํต ๊ด์ฌ ์ฌํญ์ด๋ผ๊ณ ํ๋ฉฐ ์ด๋ฅผ ์คํ๋ง์ AOP๋ก๋ ํด๊ฒฐํ ์ ์์ง๋ง ์น์์๋ ์๋ธ๋ฆฟ ํํฐ์ ์คํ๋ง ์ธํฐ์ ํฐ๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
๐ HTTP์ ํค๋๋ URL ์ ๋ณด (ํน์ URL์ผ ๋ ์ธ์ฆ) โHttpServletRequest
๋ฅผ ์ ๊ณตํ๋ ์๋ธ๋ฆฟ ํํฐ, ์คํ๋ง ์ธํฐ์ ํฐ ์ฌ์ฉ
์๋ธ๋ฆฟ ํํฐ & ์คํ๋ง ์ธํฐ์ ํฐ
ํํฐ๋ ์๋ธ๋ฆฟ์์ ์ ๊ณตํ๊ณ , ์ธํฐ์ ํฐ๋ ์คํ๋ง MVC๊ฐ ์ ๊ณตํ๋ ๊ธฐ์ ์ด๋ค.
ํ๋ฆ์ ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
ํํฐ์ ์ธํฐ์ ํฐ ๋ชจ๋ ์คํ๋ง controller๊ฐ ์คํ๋๊ธฐ ์ ํ์ ์ ์ฉ๋๋ค.
์๋ธ๋ฆฟ ํํฐ
๐น ํํฐ์ ํ๋ฆ
HTTP ์์ฒญ โ WAS โ ํํฐ โ ์๋ธ๋ฆฟ โ ์ปจํธ๋กค๋ฌ
- ํํฐ๋ ํน์ URL ํจํด์ ์ ์ฉ ๊ฐ๋ฅ ๐ /* ์ด๋ผ๊ณ ํ๋ฉด ๋ชจ๋ ์์ฒญ์ ํํฐ๊ฐ ์ ์ฉ
- ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ด ์คํ๋ง์ ๊ฐ์ฅ ์๋จ์ ์กด์ฌํ๋ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ์ด๋ฏ๋ก ํํฐ๋ ์คํ๋ง ๋ฒ์ ๋ฐ์์ ์ฒ๋ฆฌ๋จ
- ์คํ๋ง ๋ฒ์ ๋ฐ์ด๋๋ผ๋ bean ์ฌ์ฉ ๊ฐ๋ฅ..! โ ์๋๋ ๋ชป ์ผ๋๋ฐ ๋ฒ์ ์ ๋๋ฉด์ ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ๋จ..
๐น ํํฐ ์ฒด์ธ
HTTP ์์ฒญ โ WAS โ ํํฐ1 โ ํํฐ2 โ ํํฐ3 โ ์๋ธ๋ฆฟ โ ์ปจํธ๋กค๋ฌ
- ์ค๊ฐ์ ํํฐ๋ฅผ ์์ ๋กญ๊ฒ ์ถ๊ฐ ๊ฐ๋ฅ
ex) ๋ก๊ทธ๋ฅผ ๋จ๊ธฐ๋ ํํฐ๋ฅผ ๋จผ์ ์ ์ฉํ๊ณ , ๊ทธ ๋ค์์ ๋ก๊ทธ์ธ ์ฌ๋ถ๋ฅผ ์ฒดํฌํ๋ ํํฐ ๋ง๋ฆ
๐น ํํฐ ์ธํฐํ์ด์ค
public interface Filter {
public default void init(FilterConfig filterConfig) throws ServletException {}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException;
public default void destroy() {}
}
- ํํฐ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ๋ฑ๋กํ๋ฉด ์๋ธ๋ฆฟ ์ปจํ ์ด๋๊ฐ ํํฐ๋ฅผ ์ฑ๊ธํค ๊ฐ์ฒด๋ก ์์ฑํ๊ณ ๊ด๋ฆฌ
init()
: ํํฐ ์ด๊ธฐํ ๋ฉ์๋ โ ์๋ธ๋ฆฟ ์ปจํ ์ด๋๊ฐ ์์ฑ๋ ๋ ํธ์ถdoFilter()
: ๊ณ ๊ฐ์ ์์ฒญ์ด ์ฌ ๋๋ง๋ค ํด๋น ๋ฉ์๋ ํธ์ถ โ ํํฐ ๋ก์ง ๊ตฌํchain.doFilter()
๋ก ๋ค์ ํํฐ ํธ์ถ โ ๋ง์ฝ ์๋ค๋ฉด ์๋ธ๋ฆฟ ํธ์ถ
destroy()
: ํํฐ ์ข ๋ฃ ๋ฉ์๋ โ ์๋ธ๋ฆฟ ์ปจํ ์ด๋๊ฐ ์ข ๋ฃ๋ ๋ ํธ์ถ
์คํ๋ง ์ธํฐ์ ํฐ
โจ ์๋ธ๋ฆฟ ํํฐ๋ณด๋ค ํธ๋ฆฌํ๊ณ ๋ ์ ๊ตํ๋ฉฐ ๋ค์ํ ๊ธฐ๋ฅ ์ ๊ณต
๐น ์คํ๋ง ์ธํฐ์ ํฐ ํ๋ฆ
HTTP ์์ฒญ โ WAS โ ํํฐ โ ์๋ธ๋ฆฟ โ ์คํ๋ง ์ธํฐ์ ํฐ โ ์ปจํธ๋กค๋ฌ
- ๋์คํจ์ฒ ์๋ธ๋ฆฟ๊ณผ ์ปจํธ๋กค๋ฌ ์ฌ์ด์์ ์ปจํธ๋กค๋ฌ ํธ์ถ ์ง์ ์ ํธ์ถ๋จ
๐น ์คํ๋ง ์ธํฐ์ ํฐ ์ฒด์ธ
HTTP ์์ฒญ โ WAS โ ํํฐ โ ์๋ธ๋ฆฟ โ ์ธํฐ์ ํฐ1 โ ์ธํฐ์ ํฐ2 โ ์ปจํธ๋กค๋ฌ
๐น ์คํ๋ง ์ธํฐ์ ํฐ ์ธํฐํ์ด์ค
public interface HandlerInterceptor {
default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
return true;
}
default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
@Nullable ModelAndView modelAndView) throws Exception {
}
default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
@Nullable Exception ex) throws Exception {
}
}
doFilter
ํ๋๋ก ๋ก์ง์ ์ํํ๋ ์๋ธ๋ฆฟ ํํฐ์ ๋ฌ๋ฆฌ ์คํ๋ง ์ธํฐ์
ํฐ๋ 3๊ฐ๋ก ์ธ๋ถํ๋์ด์๋ค.
preHandle()
: ์ปจํธ๋กค๋ฌ ํธ์ถ ์ (ํธ๋ค๋ฌ ์ด๋ํฐ ํธ์ถ ์ )postHandle()
: ์ปจํธ๋กค๋ฌ ํธ์ถ ํ (ํธ๋ค๋ฌ ์ด๋ํฐ ํธ์ถ ํ)afterCompletion()
: ์์ฒญ ์๋ฃ ์ดํ โ ํญ์ ํธ์ถ๋จ
ํํฐ์ ์ธํฐ์ ํฐ ์ฐจ์ด ์ ๋ฆฌ ๋ฐ ์์ฝ
- XSS ๊ณต๊ฒฉ, CORS ์ ์ฑ ์ ์ ๋ฐ๋ฅด๋ฉด์ ๋ณด๋๋์ง ๋ฑ์ ๋จผ์ ํํฐ์์ ๊ฑฐ๋ฅด๊ณ ํต๊ณผํ ๊ฒ๋ค๋ง ์คํ๋ง์์ ์ฒ๋ฆฌ
- ๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ์ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ ๋ค๋ก ์ธก์ ์ ์ธํฐ์ ํฐ ์ฌ์ฉ
์ฐธ๊ณ ์๋ฃ
https://mangkyu.tistory.com/173
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2
'Spring > Spring & Spring Boot' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] Example<T> ์ธํฐํ์ด์ค (0) | 2025.03.11 |
---|---|
[Spring] Spring Batch 5 ์ฌ์ฉํด๋ณด๊ธฐ (0) | 2024.07.31 |
[Spring] Spring Batch๋ก ํ ๋ฌ ์ง๋ ๋ฐ์ดํฐ ์ญ์ ํ๊ธฐ (0) | 2024.07.29 |
[Spring/Spring Boot] SSE (Server-Sent Events)์ EventSource ์ ์ฉํด๋ณด๊ธฐ (0) | 2024.05.14 |
[Spring] Spring Security @AuthenticationPrincipal (0) | 2024.04.10 |