WebMvcConfigurer 인터페이스

최주영·2024년 2월 20일
0

springboot

목록 보기
5/14

✅ WebMvcConfigurer

  • 스프링 프레임워크에서 제공하는 인터페이스이다.
  • 보일러플레이트 코드 없이 요구사항에 맞게 프레임워크를 조정할 수 있게 해준다.
  • 특정한 스프링 클래스를 구현하거나 상속할 필요 없이 MVC 구성정보를 제어할 수 있게 해준다.
  • 스프링 부트에 있는 기본 설정을 바꾸거나 스프링에 추가적인 설정을 해줄 필요가 있을 때 사용한

✅ 용도
1. 인터셉터 등록 -> HandlerInterceptor 인터페이스를 상속받음
2. 스프링에 내장되있는 뷰리졸버 로직방식 변경 가능
3. 기본 화면전환

컨트롤러에 따로 매핑을 하지 않아도 뷰페이지로 이동함
registry.addviewController("매핑주소").setViewName("뷰페이지");
registry.addViewController("/").setViewName("index");

  1. cors에 대한 허용설정
  • 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");
	}
}
profile
우측 상단 햇님모양 클릭하셔서 무조건 야간모드로 봐주세요!!

0개의 댓글