
@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νΈ μ μκ°νκ³ μ 리ν λ΄μ©μ λλ€.