@Slf4j
@Configuration
public class WebConfiguration implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// 리소스 핸들러를 등록 ( ReactResourceResolver)
ResourceResolver resolver = new ReactResourceResolver();
registry.addResourceHandler("/**")
.resourceChain(true)
.addResolver(resolver);
}
public class ReactResourceResolver implements ResourceResolver {
// react 리소스 위치
private static final String REACT_DIR = "/static/";
// 정적 리소스 이름
private static final String REACT_STATIC_DIR = "static";
// 정적 리소스의 확장자를 정의
private Resource index = new ClassPathResource(REACT_DIR + "index.html");
private List<String> staticExtension = Arrays.asList("png", "jpg", "io", "json", "js", "html");
// 요청경로로 보내거나 없으면 index로 보낸다.
private Resource resolve(String requestPath) {
log.info(requestPath);
if (requestPath == null) {
return null;
}
if (staticExtension.contains(requestPath)
|| requestPath.startsWith(REACT_STATIC_DIR)) {
return new ClassPathResource(REACT_DIR + requestPath);
} else {
return index;
}
}
@Override
public Resource resolveResource(HttpServletRequest request, String requestPath, List<? extends Resource> locations, ResourceResolverChain chain) {
return resolve(requestPath);
}
@Override
public String resolveUrlPath(String resourcePath, List<? extends Resource> locations, ResourceResolverChain chain) {
Resource resolvedResource = resolve(resourcePath);
if (resolvedResource == null) {
return null;
}
try {
return resolvedResource.getURL().toString();
} catch (IOException e) {
return resolvedResource.getFilename();
}
}
}
}
LIST
'4차산업혁명의 일꾼 > 웹개발' 카테고리의 다른 글
JWT 생성과 시큐리티 필터 연계 (0) | 2024.12.26 |
---|---|
카프카와 레디스 사용법 정리 (0) | 2024.12.26 |
비동기 클라이언트 수신 SseEmitter 사용법과 어노테이션 끄적 (2) | 2024.12.25 |
성장욕구와 기부의 보람 [항해 99 잔디기부 캠페인] (1) | 2024.12.24 |
스프링부트 3.x 연구 (0) | 2024.12.04 |