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) 형식으로 작성하여 사용합니다.
감사합니다.
'Spring' 카테고리의 다른 글
[SpringBoot] Mybatis 다중 Datasource 적용하기 (0) | 2024.05.27 |
---|---|
[SpringBoot] Test 코드 작성하기(MockMvc) (0) | 2024.05.27 |
[SpringBoot] JAR 파일 서버 배포 (0) | 2024.05.20 |
[SpringBoot] Error 지원되지 않는 문자 집합(클래스 경로에 orai18n.jar 추가): KO16MSWIN949 (0) | 2024.05.20 |
[SpringBoot] logback-spring.xml 사용하기 (0) | 2024.05.20 |