2023. 3. 29. 14:45γSpring
μ½λμ νλ¦μ μν΄ μλ ν΄λΉ Controllerμ μ£ΌκΈ°λ₯ μ μΈνκ³ λ€λ₯Έ μΌλ€μ νκ³ μλ κ²½μ°κ° μμ
μ μ²λ¦¬, νμ²λ¦¬λΌ ν¨. > μμ§λ λ¨μ΄μ§.
곡ν΅μ μΈ μ μ²λ¦¬ νμ²λ¦¬λ₯Ό λ°λ‘ λΉΌμ μ²λ¦¬ν΄ μμ§λλ₯Ό λμΌ μ μλ€.
κ·Έλ AOP, intercepter, filter λ±μ μ¬μ©νλ€.
Intercepter
μμ§λλ₯Ό λμ΄κΈ° μν΄ μΈν°μ
ν°λ₯Ό νμ© νλ€. μΈν°μ ν°λ₯Ό μ¬μ©νλ©΄ λ°λ³΅μ μΈ λΆνμν μΌλ€μ μΈν°μ ν°κ° λμ μ²λ¦¬. μ΄λ€ μμ μ μΈν°μ ν°κ° μνν μ§ μ€μ μ νλ ν΄λμ€λ₯Ό λ§λ€μ΄μΌ ν¨. νΉμ λ©μλκ° μ€νλ λ μμ ν΄μΌ νλ μΈν°μ ν°μ ν΄λμ€λ₯Ό λ§λ€κ³ preHandle, postHandleμ ꡬννλ€λ©΄ ꡬνν κΈ°λ₯μ μ€νμν€κΈ° μν΄μλ μλμ²λΌ μΈν°μ ν° μ€μ ν΄λμ€λ₯Ό λ§λ€μ΄μΌ νλ€. μΈν°μ ν° μ€μ ν΄λμ€λ λ°λμ 'WebMvcConfigurer'λΌλ μΈν°νμ΄μ€λ₯Ό ꡬνν΄μ λ§λ λ€. |
test html 3κ° μμ±νμ¬ νμ΄μ§ μ΄λνκ² μ€μ .
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
t1νμ΄μ§<br>
<a href="/test1/t2">t2νμ΄μ§λ‘ μ΄λ</a>
</body>
</html>
-
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
t2νμ΄μ§<br>
<a href="/test1/t3">t3νμ΄μ§λ‘ μ΄λ</a>
</body>
</html>
-
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
t3νμ΄μ§
</body>
</html>
controller μμ±
package com.study.shop.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/test1")
public class TestController {
@GetMapping("/t1")
public String t1() {
System.out.println("μ μ²λ¦¬ μμ
μ€ν");
System.out.println("t1 λ©μλ μμ
μ€ν");
return "t1";
}
@GetMapping("/t2")
public String t2() {
System.out.println("μ μ²λ¦¬ μμ
μ€ν");
System.out.println("t2 λ©μλ μμ
μ€ν");
return "t2";
}
@GetMapping("/t3")
public String t3() {
System.out.println("μ μ²λ¦¬ μμ
μ€ν");
System.out.println("t3 λ©μλ μμ
μ€ν");
return "t3";
}
}
ν΄λμ€ TestIntercepter1, IntercepterConfig μμ±
κ°κ° μλ μΈν°νμ΄μ€ ꡬν
TestIntercepter1 : μ΄λ€ κΈ°λ₯μ ν μ§ μ μνλ ν΄λμ€
HandlerInterceptor ꡬν.
package com.study.shop.intercepter;
import org.springframework.web.servlet.HandlerInterceptor;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
public class TestIntercepter1 implements HandlerInterceptor{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
System.out.println("preHandle() λ©μλ μ€ν~");
return true;
}
}
IntercepterConfig : μ°λ¦¬κ° λ§λ μΈν°μ ν°λ₯Ό μΈμ μΈ μ§ μ€μ νλ ν΄λμ€
μ€μ μ μν΄ WebMvcConfigurer ꡬν.
package com.study.shop.intercepter;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration //Config : μ€μ μμ
νλ ν΄λμ€μ λΆμ¬μ€.
public class IntercepterConfig implements WebMvcConfigurer{
@Override
public void addInterceptors(InterceptorRegistry registry) {
//κ°μ²΄ μμ±
registry.addInterceptor(new TestIntercepter1())
.addPathPatterns("/test1/t1")
.addPathPatterns("/test1/t2"); //t1,t2λ‘ κ° λ TestIntercepter1μ preHandle() λ©μλκ° κ³μ μ€ν λ¨.
}
νμ΄μ§ μ΄λνλ©΄ preHandle() λ©μλ μ€νλ¨.
μ½μμ 보면 νΉμ λ©μλκ° μ€νλκΈ° μ μ preHandle() λ©μλ μ€νλ¨.
preHandleμ κ²λ¬Έμλ₯Ό λ©μλ μ(pre)μ μ€μ ν κ².
postHandle() λ©μλ μ€ν
μ½μμ 보면 νΉμ λ©μλκ° μ€νλκΈ° μ μ postHandle() λ©μλ μ€νλ¨.
postHandleμ κ²λ¬Έμλ₯Ό λ©μλ λ€μ μ€μ ν κ².
public class TestIntercepter1 implements HandlerInterceptor{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
System.out.println("preHandle() λ©μλ μ€ν~");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("postHandle() λ©μλ μ€ν~");
}
}
μ¬λ¬κ°μ μΈν°μ ν°λ μ¬μ© κ°λ₯.
μΈν°μ ν° κ΄λ ¨ κΈ°λ₯ ν΄λμ€λ μ¬λ¬κ° μμ±νκ³ IntercepterConfig μ€μ ν΄λμ€λ νλλ‘ μμ
TestIntercepter2 ν΄λμ€ μμ±νμ¬ HandlerInterceptor ꡬν
preHandle, postHandle μ€λ²λΌμ΄λ©
package com.study.shop.intercepter;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
public class TestIntercepter2 implements HandlerInterceptor{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
System.out.println("λλ²μ§Έ μΈν°μ
ν° preHandle μ€ν");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("λλ²μ§Έ μΈν°μ
ν° postHandle μ€ν");
}
}
IntercepterConfigμ μΈμ κΈ°λ₯ μ€νν μ§ μ§μ .
package com.study.shop.intercepter;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration //ν΄λμ€μ λν κ°μ²΄ + μ€μ νμΌμμ κ°λ°μμκ² μΈμμμΌμ£Όλ μ΄λ
Έν
μ΄μ
public class IntercepterConfig implements WebMvcConfigurer{
//ν΄λΉ λ©μλμμ μ°λ¦¬κ° λ§λ μΈν°μ
ν° ν΄λμ€μ κΈ°λ₯μ μΈμ μ€νν μ§ μ§μ
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new TestIntercepter2())
.addPathPatterns("/**/**"); //λͺ¨λ 컨νΈλ‘€λ¬ λͺ¨λ λ©μλμ μ μ©
//TestIntercepter1 μΈν°μ
ν° ν΄λμ€μ κΈ°λ₯μ μ¬μ©νκ² λ€.
//κ°μ²΄ μμ±
registry.addInterceptor(new TestIntercepter1())
//κ°κ°μ λ©μλμ μ§μ
.addPathPatterns("/test1/t1")
.addPathPatterns("/test1/t2") //t1,t2λ‘ κ° λ TestIntercepter1μ preHandle() λ©μλκ° κ³μ μ€ν λ¨.
.addPathPatterns("/test1/t3");
//μ΄ μΈμ λ©μλ μΈμ μ€νν μ§ μ§μ νλ λ²
//μ κ°κ°μ λ©μλ μ§μ κ³Ό κ°μ μ½λ
.addPathPatterns("/test/t1", "/test1/t2", "/test1/t3") // ,λ‘ λμ΄ κ°λ₯
//νλμ 컨νΈλ‘€λ¬μμ λͺ¨λ λ§€μλμ μ μ©νλ λ°©λ²
.addPathPatterns("/test1/**") ///test1/**μ μλ λͺ¨λ λ©μλλΌλ μλ―Έ
//νΉμ λ©μλλ§ μ μΈνκ³ μΆμ λ
.addPathPatterns("/test1/**")
.excludePathPatterns("/test1/t3") //λͺ¨λ λ©μλμ λ€ μ μ©νμ§λ§ t3 μ μΈ. μ μΈλ ,λ‘ λμ΄ κ°λ₯
//νΉμ λ¨μ΄κ° λ€μ΄κ° λ©μλλ§ μ€ν
.addPathPatterns("/test1/*List") //test1 컨νΈλ‘€λ¬ μμ url ν¨ν΄μ΄ /~Listλ‘ λλλ λ©μλλ§ μ€ν
}
}
μ½μμ°½μ νμΈν΄λ³΄λ©΄ μΈν°μ ν°κ° μ¬λ¬κ°μ¬λ μ μλν¨.
**μ°Έκ³ νλμ 컨νΈλ‘€λ¬μμ λͺ¨λ λ§€μλμ μ μ©νλ λ°©λ² .addPathPatterns("/test1/**") ///test1/**μ μλ λͺ¨λ λ©μλλΌλ μλ―Έ νΉμ λ©μλλ§ μ μΈνκ³ μΆμ λ .addPathPatterns("/test1/**") .excludePathPatterns("/test1/t3") //λͺ¨λ λ©μλμ λ€ μ μ©νμ§λ§ t3 μ μΈ. μ μΈλ ,λ‘ λμ΄ κ°λ₯ νΉμ λ¨μ΄κ° λ€μ΄κ° λ©μλλ§ μ€ν .addPathPatterns("/test1/*List") //test1 컨νΈλ‘€λ¬ μμ url ν¨ν΄μ΄ /~Listλ‘ λλλ λ©μλλ§ μ€ν |
μΈν°μ ν°λ‘ λ°μ΄ν° λκΈ°κ³ λ°μμ νμ΄μ§λ₯Ό λ€λ₯΄κ² 컨νΈλ‘€ κ°λ₯
preHandle()λ‘ controller κ°κΈ° μ μ κ²λ¬Έμμμ νμ΄μ§ λ€λ₯΄κ² λ³΄λΌ μ μλ€.
ifλ¬ΈμΌλ‘ 쑰건μ λ°λΌ νμ΄μ§ λ€λ₯΄κ² μ΄λ.
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
System.out.println("preHandle() λ©μλ μ€ν~");
String name = request.getParameter("name");
String age = request.getParameter("age");
System.out.println(name);
System.out.println(age);
//쑰건μ λ°λΌ νμ΄μ§ λ€λ₯΄κ² μ΄λ
if(name.equals("java")) {
response.sendRedirect("/test1/t3");
return false;
}
return true;
//return true > μλ κ°λ €λ λ©μλλ‘ μ§μ
(λλΆλΆ true)
//return false > μλ κ°λ €λ λ©μλλ‘μ μ§μ
μ λ§μμ€.
}
컨νΈλ‘€λ¬ λ€ μ€νλλ©΄ postHandle() μ€νλ¨.
postHandle()μ html κ°κΈ° μ μ λ°μ΄ν° λ μΆκ°ν΄μ κ°μ Έκ° μ μλ€.
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("postHandle() λ©μλ μ€ν~");
//postHandleμλ ModelAndView λ§€κ°λ³μκ° μμ (λ°μ΄ν° λκΈΈ λ μ¬μ© κ°λ₯, νμ΄μ§ μ΄λλ κ°λ₯)
modelAndView.addObject("addr", "μΈμ°μ");
}
htmlμμ λ°μ΄ν° λ½μ보면
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
t2νμ΄μ§<br> <!-- postHandleμμ μ λ¬ν λ°μ΄ν° -->
λμ΄μ¨ λ°μ΄ν° : [[${name}]], [[${age}]], [[${addr}]] <br>
<a href="/test1/t3">t3νμ΄μ§λ‘ μ΄λ</a>
</body>
</html>
μλμ²λΌ λ°μ΄ν° μ λ°μμ΄.
'Spring' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
μΌνλͺ° νλ‘μ νΈ(9) μν κ΄λ¦¬ (0) | 2023.03.30 |
---|---|
μΌνλͺ° νλ‘μ νΈ(8) μν λ±λ‘ (0) | 2023.03.29 |
μΌνλͺ° νλ‘μ νΈ(7) λ©λ΄ (0) | 2023.03.28 |
μΌνλͺ° νλ‘μ νΈ(6) μν (0) | 2023.03.28 |
μΌνλͺ° νλ‘μ νΈ(5) λ‘κ·ΈμΈ κΈ°λ₯ (0) | 2023.03.28 |