Spring Boot์์ Interceptor์ ๋ํด ์์๋ณด๊ธฐ! (เธ โขฬฯโขฬ)เธ
- ์ฌ์ฉ IDE : IntelliJ IDEA Ultimate
- ์ฌ์ฉ DB : MySQL
- ์ฌ์ฉ ์ธ์ด & SDK : Java & Amazon correto 11
- ์ ๋ฆฌ๋ณธ์ ๋๋ค ์ฐธ๊ณ ์ฉ์ผ๋ก๋ง ๋ด์ฃผ์ธ์ :D
- ํ์๊ด๋ฆฌ ์์ ์์ ์งํํ ์์ ์ ๋๋ค!
๊ถ๊ธํ์ ๋ถ๋ค์ ์ ์ ๋ด์ฉ์ ์ฐธ๊ณ ํด๋ณด์ธ์ :D
์ด์ ๊ธ
ฮธ Spring Boot ์์ 1 (ํ์๊ด๋ฆฌ)
๐ Spring Boot ์์ 2 (ํ์๊ด๋ฆฌ)
๐ Spring Boot ์์ 3 (ํ์๊ด๋ฆฌ)
๐ Spring Boot ์์ 4 (ํ์๊ด๋ฆฌ)
๐ Spring Boot ํ์๊ด๋ฆฌ TEST ๋ชจ์
๐ Spring Boot Mybatis ์ฌ์ฉ๋ฒ
Interceptor๋ ๋จ์ด ๋ป ๊ทธ๋๋ก ๊ฐ๋ก์ฑ๋ ๊ธฐ๋ฅ์ ์ํํฉ๋๋ค.
์๋ฅผ ๋ค๋ฉด ์ดํดํ๊ธฐ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค!
์ผํ๋ชฐ๊ฐ์ ์ฌ์ดํธ์์ ๋ก๊ทธ์ธ์์ด ์ฅ๋ฐ๊ตฌ๋๋ฅผ ๋๋ฅด๋ฉด ๋ก๊ทธ์ธํ์ด์ง๋ก ๋์ด๊ฐ๋ ๊ทธ ์ํฉ
๋ง์ด ๊ฒช์ด๋ณด์ ์ ์์ผ์์ฃ ??
์ฌ์ฉ์๊ฐ ํ์ ๊ธฐ๋ฅ(ex : ๋ก๊ทธ์ธ)์ ์ํํ์ง ์๊ณ ํ์ ๊ธฐ๋ฅ์ ์กฐ๊ฑด์ผ๋ก ํ๋ ์์ (ex : ์ฅ๋ฐ๊ตฌ๋)๋ฅผ ์ํํ๋ ๊ฒ์ ๋ฐฉ์งํ๋ ์ญํ ์ด๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค!!
์ ๋ ๋ก๊ทธ์ธ์ ๋จผ์ ์ํํ๊ฒ ํ๋๊ฒ์ ๋ง๋ค์ด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค!
๊ทธ๋ผ ์ง๊ธ๋ถํฐ ์์๋ณด๋ฌ ๊ฐ์๋ค สใฃโขแดฅโขสใฃ
// ์ธํฐ์
ํฐ ํด๋์ค๋ HandlerInterceptor ๋ฅผ ์ํ ๋ฉ์๋๋ฅผ ์ฐ๊ธฐ ์ํด implements ํด์ผํฉ๋๋ค.
public class LoginCheckInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException {
// preHandle : ์ฌ์ ์ ์กฐ์ํ๋ค.
// ์ปจํธ๋กค๋ฌ์ ๊ฐ๊ธฐ ์ Interceptor์์ ์บ์นํด์ ๋ค๋ฅธ ์์
์ ์ํํ๊ฒ ๋ณด๋.
// HttpServletRequest : ๊ฐ์ข
ํด๋์ค๋ฅผ ์์ฒญํ๊ฒ ํด์ฃผ๋ ๋ฉ์๋. ์คํ๋ง์์๋ ๊ตณ์ด ์์จ๋ ๋ค ์ก์์ฃผ์ง๋ง ๊ทผ๋ณธ์ ์ผ๋ก๋ ์ด ๋ฉ์๋๊ฐ ํ์์ด๋ค.
// ์ฌ์ฉ์๊ฐ ์์ฒญํ ์ฃผ์
String requestURI = request.getRequestURI();
System.out.println("requestURI = " + requestURI);
// ์ธ์
๊ฐ์ ธ์ด
HttpSession session = request.getSession();
// ์ธ์
์ ๋ก๊ทธ์ธ ์ ๋ณด๊ฐ ์๋์ง ํ์ธ
if (session.getAttribute(SessionConst.LOGIN_EMAIL)==null) {
// ๋ฏธ ๋ก๊ทธ์ธ ์ํ
// ๋ก๊ทธ์ธ์ ํ์ง ์์ ๊ฒฝ์ฐ ๋ฐ๋ก ๋ก๊ทธ์ธํ์ด์ง๋ก ๋ณด๋ด๊ณ , ๋ก๊ทธ์ธ์ ํ๋ฉด ์์ฒญํ ํ๋ฉด์ ๋ณด์ฌ์ค.
session.setAttribute("redirectURL", requestURI);
response.sendRedirect("/member/login");
return false;
} else {
// ๋ก๊ทธ์ธ ์ํ
return true;
}
}
์ ์ฝ๋๋ ์ฃผ์์์ ์ ์ ์๋ฏ์ด Controller์ ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ ๋ก๊ทธ์ธ ๊ฒ์ฆ์ ํ ๋ค,
๋ก๊ทธ์ธ์ด ํ์ํ๋ค๋ฉด ๋ก๊ทธ์ธ ํ์ด์ง๋ก ์ด๋ & ์ฌ์ฉ์๊ฐ ์ด์ ์ ์์ฒญํ ์ฃผ์๋ก ๋ณด๋ด๊ธฐ ์ํ ์์ ์ ํ๋ ํด๋์ค๋ผ ๋ณด์๋ฉด ๋ฉ๋๋ค.
์ด์ ์ฌ์ฉ์๊ฐ ํน์ ์ฃผ์๋ฅผ ์์ฒญ ํ์ ๋ Interceptor๋ฅผ ์ํํ๊ฒ ํ๋ ํด๋์ค๋ฅผ ๋ง๋ค๋ฌ ๊ฐ๋ด ์๋ค!
// @Configuration : ์ค์ ์ ๋ณด๋ฅผ ์คํ๋ง ์คํ ์ ๋ฑ๋กํด์ค
// ์ฐจํ์ ํ์ธํ ๋ ๋ถํธํ๋ค๋ฉด ์๋ @Configuration ์ ์ฃผ์์ฒ๋ฆฌํ๋ฉด ๋จ
@Configuration
public class WebConfig implements WebMvcConfigurer {
// WebMVCConfigurer์ ์ํ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด implements ํ๊ธฐ!
// ๋ก๊ทธ์ธ ์ฌ๋ถ์ ๋ฐ๋ฅธ ์ ์ ๊ฐ๋ฅ ํ์ด์ง ๊ตฌ๋ถ
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginCheckInterceptor())
// ์๊น ๋ง๋ LoginCheckInterceptor ํด๋์ค ๋ด์ฉ์ ๋๊น
.order(1)
// order : ํด๋น ์ธํฐ์
ํฐ๊ฐ ์ ์ฉ๋๋ ์์, 1์ด๋ฉด ์ฒซ๋ฒ์งธ๋ก ์คํ
.addPathPatterns("/**")
// ํ์ฌ ํ๋ก์ ํธ์ ๋ชจ๋ ์ฃผ์์ ๋ํด ์ธํฐ์
ํฐ๋ฅผ ์ ์ฉ
.excludePathPatterns("/", "/member/save", "/member/login","/member/logout", "/css/**");
// ๊ทธ์ค์ ์ด ์ฃผ์๋ ์ ์ธ
}
}
์ง๊ธ ๋ง๋ ํด๋์ค๋ ์๊น ๋ง๋ ํด๋์ค๋ฅผ ์ด๋ค ์ฃผ์์ ๋ช๋ฒ์งธ๋ก ํน์ ์ฃผ์๋ฅผ ์ ์ธํ๊ณ ์คํํ ๊ฑด์ง ๊ฒฐ์ ํด ์ฃผ๋ ํด๋์ค์ ๋๋ค. ํด๋น ํด๋์ค๊ฐ ์๋ค๋ฉด, ๋๋ @Configuration๊ฐ ์๋ค๋ฉด ์ธํฐ์ ํฐ๋ ์คํ๋์ง ์์ต๋๋ค.
์ด์ ์ธํฐ์ ํฐ๋ฅผ ์ํ ์ค๋น๋ ๋๋ฌ์ผ๋ Controller๋ก ๋์ด๊ฐ๋ด ์๋ค! ูฉ( แ )ู
// ๋ก๊ทธ์ธ
@PostMapping("login")
public String login(@ModelAttribute MemberLoginDTO memberLoginDTO, HttpSession session) {
System.out.println("MemberController.login");
if (ms.login(memberLoginDTO)) {
session.setAttribute(LOGIN_EMAIL,memberLoginDTO.getMemberEmail());
// return "member/mypage"; // ๊ธฐ์กด ๋ฆฌํด
String redirectURL = (String) session.getAttribute("redirectURL");
// ์ธํฐ์
ํฐ๋ฅผ ๊ฑฐ์ณ์ ์ค๋ฉด redirectURL์ ๊ฐ์ด ์์๊ฒ์ด๊ณ ,
// ๊ทธ๋ฅ ๋ก๊ทธ์ธ์ ํด์ ์ค๋ฉด redirectURL์ ๊ฐ์ด ์์๊ฒ์.
// ๋ฐ๋ผ์ if else๋ก ๊ตฌ๋ถํด์ค
if (redirectURL != null) {
return "redirect:"+redirectURL;
// ์ฌ์ฉ์๊ฐ ์์ฒญํ ์ฃผ์๋ก ๋ณด๋ด์ฃผ๊ธฐ ์ํด ๋ฆฌํด๊ฐ์ ์์ ๊ฐ์ด ์ธํ
} else {
return "redirect:/";
// ๋ก๊ทธ์ธ์ด ์ด๋ฏธ ๋ ํ์์ด๋ฏ๋ก index ํ์ด์ง๋ก ๊ฐ๊ฒ ์ค์
}
} else {
return "member/login";
}
}
์์ ๊ฐ์ด ์ปจํธ๋กค๋ฌ์์์ ์ค์ ๋ ๋๋ฌ๋ค๋ฉด ์ด์ Interceptor๊ฐ ์๋๋๋ ํ๋ก์ ํธ๊ฐ ์์ฑ๋๊ฒ๋๋ค!!
์ด๋ ๊ฒ ํ์๊ด๋ฆฌ ์์ ๋ ๋๋ง์น๋๋ก ํ๊ฒ ์ต๋๋ค.
๋ค์ ์๊ฐ์๋ ๊ฒ์๊ธ ๊ด๋ฆฌ ์์ ๋ก ๋์์ฌํ ๋ ๊ทธ ์ ๊น์ง๋ ํ์๊ด๋ฆฌ๋ฅผ ๋ณต์ตํ๋ฉด ์ข์๊ฑฐ๊ฐ์ต๋๋ค. :D
๊ทธ๋ผ ๋ค์์ ๊ฑด๊ฐํ ๋ชจ์ต์ผ๋ก ๋ง๋์ ~ หหเธโโธโธฬฃสทฬฃฬซโธฬฃโธโเธหห