- Interceptor๋ฅผ ์ฌ์ฉํ API ๋ก๊น
- ์์ฒญ ์ ๋ณด(
HttpServletRequest)๋ฅผ ์ฌ์ ์ฒ๋ฆฌํฉ๋๋ค.- ์ด๋๋ฏผ ๊ถํ ์ฌ๋ถ๋ฅผ ํ์ธํ์ฌ ์ธ์ฆ๋์ง ์์ ์ฌ์ฉ์์ ์ ๊ทผ์ ์ฐจ๋จํฉ๋๋ค.
- ์ธ์ฆ ์ฑ๊ณต ์, ์์ฒญ ์๊ฐ๊ณผ URL์ ๋ก๊น ํ๋๋ก ๊ตฌํํ์ธ์.
HandlerInterceptor ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด ๋ง๋ค๋ฉฐ ์ธ ๊ฐ์ ์ฃผ์ ๋ฉ์๋๋ฅผ ๊ฐ์ง๋ค.
preHandel() : ์ปจํธ๋กค๋ฌ ์คํ ์ ์ ํธ์ถ๋๋ฉฐ ์ฌ๊ธฐ์ ์์ฒญ์ ๊ณ์ ์งํํ ์ง ๊ฒฐ์ ํ๋ค.postHandler() : ์ปจํธ๋กค๋ฌ ์คํ ํ์ ํธ์ถ๋๋ฉฐ ์๋ต ์ฒ๋ฆฌ ์ง์ ์ ํ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๋ค.afterCompletion() : ๋ทฐ๊น์ง ๋ ๋๋ง์ด ์๋ฃ๋ ํ ํธ์ถ๋์ด ๋ง๋ฌด๋ฆฌ ์์
์ ํ ์ ์๋ค.์๊ตฌ์ฌํญ์ ๋ง๊ฒ ์์ฒญ ์ ๋ณด๋ฅผ ์ฌ์ ์ฒ๋ฆฌํ๋ ์์
์ preHandle()๋ก ๊ตฌํํ๋ค.
AuthInterCeptor@Slf4j
@Component
@RequiredArgsConstructor
public class AuthInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
UserRole role = UserRole.of((String)(request.getAttribute("userRole")));
if (!UserRole.ADMIN.equals(role)) {
throw new AuthException("๊ถํ์ด ์์ต๋๋ค.");
}
Long userId = (Long)request.getAttribute("userId");
String url = request.getRequestURI();
// String stamp = LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
log.info("๊ถํ์ด ํ์ธ๋์์ต๋๋ค. userId = {}, url = {}, timestamp = {}", userId, url, LocalDateTime.now());
return true;
}
}
WebConfig@Configuration
@RequiredArgsConstructor
public class WebConfig implements WebMvcConfigurer {
public final AuthInterceptor authInterceptor;
...
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(authInterceptor)
.addPathPatterns("/admin/**"); // /admin/** ๊ฒฝ๋ก์๋ง ์ ์ฉ
}
}
WebMvcConfigurer๋ฅผ ๊ตฌํํ ์ค์ ํด๋์ค์์ ์ธํฐ์
ํฐ๋ฅผ ๋ฑ๋กํ๋ค.addPathPatterns()๋ก ์ธํฐ์
ํฐ๋ฅผ ์ ์ฉํ URL ํจํด์ ์ง์ ํ ์ ์๋ค.ํ์์ ๋ฐ๋ผ
.order(),.excludePathPatterns()๊ฐ์ ์ค์ ๋ ๊ฐ๋ฅํ๋ค.
.order(index): ์ฒด์ธ์์๋ฅผ ์ค์ .addPathPatterns("url"): ์ฒด์ธ์ ์ ์ฉํ url ์ ์ค์ .excludePathPatterns("url"): ์ฒด์ธ์ ์ ์ธํ url ์ ์ค์