✅ WebMvcConfigurer
✅ 용도
1. 인터셉터 등록 -> HandlerInterceptor
인터페이스를 상속받음
2. 스프링에 내장되있는 뷰리졸버 로직방식 변경 가능
3. 기본 화면전환
컨트롤러에 따로 매핑을 하지 않아도 뷰페이지로 이동함
registry.addviewController
("매핑주소").setViewName
("뷰페이지");
registry.addViewController("/").setViewName("index");
cors
: (cross - origin resource sharing) error -> 자바스크립트가 발생시키는 에러임의로 클래스 먼저 만들기
클래스 위에 어노테이션 configuration
을 붙임 -> Bean을 수동으로 등록해야함
-> 즉 메서드의 이름으로 빈의 이름이 결정됨 (중복된 빈이름이 있으면 안됨)
WebMvcConfigurer
인터페이스를 상속받음
package com.joo.usedmarket1.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import com.joo.usedmarket1.comm.interceptor.LoggerInterceptor;
@Configuration
public class MyWebMvcConfiguration implements WebMvcConfigurer {
// view에 대한 설정
// 기본 화면전환에 대한 설정하는 메소드를 재정의
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("index"); // http://localhost:9090/ 로 접속시 index.jsp 파일로 이동
registry.addViewController("/test").setViewName("test"); // http://localhost:9090/test 로 접속시 test.jsp 파일로 이동
}
// Interceptor 설정
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoggerInterceptor()).addPathPatterns("/member/*");
}
// alt + shift + s + v : 오버라이드 단축키
// cors에 대한 허용설정
// cors (cross - origin resource sharing) error -> 자바스크립트가 발생시키는 에러
@Override
public void addCorsMappings(CorsRegistry registry) {
// ** -> 전체를 의미 (/가 몇개가 들어가도 상관없음)
registry.addMapping("/**").allowedOrigins("http://localhost:3000");
}
//
/*
* @Override public void configureViewResolvers(ViewResolverRegistry registry) {
* InternalResourceViewResolver resolver = new InternalResourceViewResolver();
* resolver.setPrefix("/WEB-INF/view/"); resolver.setSuffix("/.jsp");
* registry.viewResolver(resolver); }
*/
}
인터셉터를 등록하는 경우
-> 임의 클래스를 만들어서 HandlerInterceptor
인터페이스를 상속받음
-> 위에서 설정한 addPathPatterns
안의 매핑주소를 연결하면 실행전과 실행후 결과가 나옴
package com.joo.usedmarket1.comm.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class LoggerInterceptor implements HandlerInterceptor{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
log.debug("===========실행전============");
log.debug(request.getRequestURI());
log.debug("===========================");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
log.debug("==========실행후=======");
log.debug("zzz");
}
}