티스토리 뷰

SpringBoot 프로젝트에서 인터셉터를 통해 간단하게 LoginCheck 어노테이션을 만드는 방법에 대해 알아보겠습니다.

 

1. 인터페이스생성

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 로그인 체크
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface LoginCheck {
  boolean required() default false; // 로그인 체크 필수 여부
}
  • @Retention(RetentionPolicy.RUNTIME): 이 어노테이션이 런타임 시에도 유지되어야 함을 나타냅니다. 즉, 컴파일된 클래스 파일에서도 이 어노테이션이 유지되어야 합니다.
  • @Target(ElementType.METHOD): 이 어노테이션이 메서드에 적용될 수 있음을 나타냅니다. 즉, 이 어노테이션은 메서드에만 사용할 수 있습니다.

 

2. 인터셉터 생성

import com.myapi.mymsgapi.comm.annotation.LoginCheck;
import com.myapi.mymsgapi.comm.utils.SessionUtil;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;

@Component
public class LoginCheckInterceptor implements HandlerInterceptor {

  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    HandlerMethod handlerMethod = (HandlerMethod) handler;
    LoginCheck loginCheck = handlerMethod.getMethodAnnotation(LoginCheck.class);

    if (loginCheck != null && loginCheck.required()) {
      if (SessionUtil.isLogin()) {
        return true;
      } else {
        response.sendRedirect(request.getContextPath() + "/user/login");
        return false; // 더 이상 진행하지 않도록 false 반환
      }
    }

    return true;
  }
}
  • 컨트롤러 메서드에 @LoginCheck 어노테이션이 작성되었는지 판단 후, 세션에서 로그인 여부를 판단합니다. 로그인되지 않았다면 로그인 페이지로 리다이렉트 합니다
  • 세션체크는 아래 포스팅 참고하세요.
    [Spring] Session 관리하기

 

3. 컨트롤러 작성

import com.myapi.mymsgapi.comm.annotation.LoginCheck;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class ChatViewController {

  @GetMapping(value = "/chats")
  @LoginCheck(required = true)
  public String chats(final Model model) {
    return "views/chat/chats";
  }
}
  • 위 처럼 @LoginCheck(required = true) 형식으로 작성하여 사용합니다.

 

감사합니다.

최근에 올라온 글
Total
Today
Yesterday