@Configuration
public class MyWebMVCConfigurer implements WebMvcConfigurer {
// BeforeActionInterceptor 불러오기(연결)
@Autowired
BeforeActionInterceptor beforeActionInterceptor;
// NeedLoginInterceptor 불러오기(연결)
@Autowired
NeedLoginInterceptor needLoginInterceptor;
// NeedLogoutInterceptor 불러오기(연결)
@Autowired
NeedLogoutInterceptor needLogoutInterceptor;
// 인터셉터 등록(적용)
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(beforeActionInterceptor).addPathPatterns("/**").excludePathPatterns("/resource/**")
.excludePathPatterns("/error");
registry.addInterceptor(needLoginInterceptor).addPathPatterns("/usr/article/write")
.addPathPatterns("/usr/article/doWrite").addPathPatterns("/usr/article/modify")
.addPathPatterns("/usr/article/doModify").addPathPatterns("/usr/article/doDelete")
.addPathPatterns("/usr/member/doLogout");
registry.addInterceptor(needLogoutInterceptor).addPathPatterns("/usr/member/login")
.addPathPatterns("/usr/member/doLogin").addPathPatterns("/usr/member/join")
.addPathPatterns("/usr/member/doJoin");
}
}
위 클래스에서는 여러 인터셉터를 등록하여 특정 경로에 대한 요청을 가로채서, 먼저 작업을 수행하도록 한다.
@Configuration
- Spring에서 이 클래스가 설정 클래스임을 나타낸다.
이 어노테이션이 붙은 클래스는 Spring 애플리케이션에서 필요한 객체들을 코드로 설정할 수 있는 중앙 설정 클래스를 만들 수 있다.
@Autowired
@Autowired을 사용하여 BeforeActionInterceptor, NeedLoginInterceptor, NeedLogoutInterceptor
개발자가 객체를 직접 생성하거나 전달할 필요 없이, Spring이 필요한 객체를 자동으로 주입해주는 편리한 도구
- myRepository = new MyRepository(); 같은 코드를 작성할 필요 없어진다.
addInterceptors(InterceptorRegistry registry)
이는 Spring MVC에서 인터셉터를 등록하는 역할을 한다. InterceptorRegistry 객체를 사용하여 인터셉터를 등록하고, 특정 URL 패턴에 대하여 인터셉터가 적용되도록 설정한다.
registry.addInterceptor(beforeActionInterceptor).addPathPatterns("/**").excludePathPatterns("/resource/**")
.excludePathPatterns("/error");
모든 경로 /dp eogkdu beforeActionInterceptor이 실행된다. /resource/ 및 /error 경로는 제외된다.
registry.addInterceptor(needLoginInterceptor).addPathPatterns("/usr/article/write")
.addPathPatterns("/usr/article/doWrite").addPathPatterns("/usr/article/modify")
.addPathPatterns("/usr/article/doModify").addPathPatterns("/usr/article/doDelete")
.addPathPatterns("/usr/member/doLogout");
위 코드는 로그인된 사용자만 접근할 수 있는 경로인 게시글 작성, 수정, 삭제 작업을 할 때 실행된다.
registry.addInterceptor(needLogoutInterceptor).addPathPatterns("/usr/member/login")
.addPathPatterns("/usr/member/doLogin").addPathPatterns("/usr/member/join")
.addPathPatterns("/usr/member/doJoin");
위 코드는 로그아웃된 사용자만 접근할 수 있는 경로인 로그인 페이지, 회원가입 페이지 에서 실행된다.
@Component
public class BeforeActionInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object handler) throws Exception {
Rq rq = new Rq(req,resp);
req.setAttribute("rq", rq);
return HandlerInterceptor.super.preHandle(req, resp, handler);
}
}
- 인터셉터의 주된 목적은 모든 요청에 대하여 Rq 객체를 생성하고, req.setAttribute는 Rq 객체를 요청의 속성으로 설정하여, 이후의 컨트롤러나 뷰에서 이 객체에 접근할 수 있게 한다.
- preHandle은 Spring의 인터셉터에서 요청이 컨트롤러에 도달하기 전에 실행되는 메서드이다. preHandle 메서드는 클라이언트의 요청이 실제 컨트롤러에 전달되기 전에 실행되며, 이를 통하여 요청을 가로채서, 특정 조건에 따라 추가적인 처리 (로그인, 로그아웃 등)을 수행하거나 요청을 차단할 수 있다.
-> true이면, 요청이 컨트롤러에 전달된다. false는 요청이 중단되며, 컨트롤러에 전달되지 않는다.
'Spring' 카테고리의 다른 글
SPRING(08.19) - Rq(Spring 객체 관리), 페이징 (0) | 2024.08.19 |
---|---|
SPRING - Rq 클래스, 세션 (0) | 2024.08.18 |
SPRING - ResultData<DT> (0) | 2024.08.18 |
SPRING(08.14) - history, location, 인터셉터 (0) | 2024.08.14 |
SPRING(08.13) - Model 객체 (0) | 2024.08.13 |