@GetMapping("/")
public String homeLogin(
@SessionAttribute(name="SESSION_KEY", required = false) Member member, Model model) {
if (member == null) return "home";
model.addAttribute("member", member);
return "loginHome";
}
μ μ½λλ μ μ© μ μ½λμ λλ€. λ¨Όμ μ μ© ν μ½λλ₯Ό 보μμ£ .
@GetMapping("/")
public String homeLoginV4(@Login Member member, Model model) {
if (member == null) return "home";
model.addAttribute("member", member);
return "loginHome";
}
@Login
μ΄λΌλ μ΄λ
Έν
μ΄μ
μΌλ‘ Member
μ λν΄ μ μ© μ μ½λμ λμΌν κ²°κ³Όλ₯Ό λ§λ€μ΄ λ
λλ€.
μ΄λ
Έν
μ΄μ
μ μλ interface
μμ @
λ₯Ό λΆμ¬μ€μΌ ν©λλ€. μλ μ΄λ
Έν
μ΄μ
μ @Login
μ΄ λλ κ² μ
λλ€.
public @interface Login
μ΄λ Έν μ΄μ μ€μ
@Target
μ μ μν μ΄λ
Έν
μ΄μ
μ΄ λΆμ μ μλ νμ
μ μ μνλ λΆλΆμ
λλ€.PARAMETER
λ νλΌλ―Έν°μ λΆμ μ μλ μ΄λ
Έν
μ΄μ
μ΄λΌλ μλ―Έμ
λλ€.@Target(ElementType.PARAMETER)
@Retention
μ μ΄λ
Έν
μ΄μ
μ΄ μ΄λκΉμ§ λ©λͺ¨λ¦¬λ₯Ό μ μ§ν μ§μ λν μ€μ μ
λλ€. κ°λ¨νκ² μ΄λ
Έν
μ΄μ
μ μλͺ
μ£ΌκΈ°λ₯Ό μ€μ ν΄μ€λ€κ³ μκ°ν΄λ λ κ² κ°μ΅λλ€. RetentionPolicy.RUNTIME
μ μ€νλ λκΉμ§ μ΄λ
Έν
μ΄μ
μ μ ν¨νκ² νκ² λ€λ μ μ±
μ€μ μ
λλ€.@Retention(RetentionPolicy.RUNTIME)
ArgumentResolver
λ₯Ό μ§μ ꡬννλ €λ©΄ HandlerMethodArgumentResolver
μΈν°νμ΄μ€λ₯Ό ꡬνν΄μΌ ν©λλ€.
public class LoginArgumentResolver implements HandlerMethodArgumentResolver
HandlerMethodArgumentResolver
ꡬν λ©μλλ μλμ κ°μ΄ supportParameter
μ resolveArguent
λ κ°μ
λλ€.
첫 λ²μ§Έ ꡬν λ©μλμΈ supportParameter
λ λ°μ νλΌλ―Έν°λ₯Ό μ²λ¦¬ν μ μλμ§ κ²μ¦νλ μν μ
λλ€.
@Login
μ΄λ
Έν
μ΄μ
μ΄ λΆμ νλΌλ―Έν°μΈμ§Member
νμ
μΈμ§μ΄λ
Έν
μ΄μ
μ λν κ²μ¦μ μν΄ MethodParameter
λ hasParameterAnnotation
λ©μλλ₯Ό μ§μν©λλ€.
boolean hasLoginAnnotation = parameter.hasParameterAnnotation(Login.class);
νμ
μ λν κ²μ¦μ getParameterType
μ μ΄μ©ν©λλ€.
isAssignableFrom
μ νλΌλ―Έν°μ ν΄λμ€ νμ
μ΄ μμ μ΄κ±°λ μμ μ μμ/ꡬννλμ§ κ²μ¦νλ λ©μλμ
λλ€.
boolean isMemberType = Member.class.isAssignableFrom(parameter.getParameterType());
λ κ²μ¦μ λ§μ‘±ν κ²½μ°μλ§ resolveArgument
λ©μλκ° μ€νλ©λλ€.
return hasLoginAnnotation && isMemberType;
μμ²μ λν μΈμ
μ κ²μ¦ν΄μΌ νλ―λ‘ HttpServletRequest
λ₯Ό μ΄μ©ν΄ μΈμ
μ 보λ₯Ό κ°μ Έμ¨ ν κ²μ¦μ μνν©λλ€.
HttpServletRequest request = (HttpServletRequest) webRequest.getNativeRequest();
HttpSession session = request.getSession(false);
if (session == null) return null;
리ν΄μ μΈμ
μ λ΄κΈ΄ Member
μ
λλ€.
return (Member) session.getAttribute("SESSION_KEY";
ArgumentResolver
κ° νΈμΆλλ©΄ κ°μ₯ λ¨Όμ supportParameter
λ₯Ό ν΅ν΄ νλΌλ―Έν° μ§μ μ¬λΆλ₯Ό νμΈνκ³ μ§μνλ€λ©΄ resolveArgument
λ₯Ό νΈμΆνμ¬ μ€μ κ°μ²΄λ₯Ό μμ±νμ¬ νΈμΆν κ³³μ κ°μ²΄μ λ°μΈλ© μμΌμ£Όλ κ² μ
λλ€.
μΈνλ° κΉμνλμ μ€νλ§ MVC 2νΈ μ μκ°νκ³ μ 리ν λ΄μ©μ λλ€.