package de.ph87.tools.web; import de.ph87.tools.group.uuid.GroupUuidArgumentResolver; import de.ph87.tools.tools.numbers.uuid.NumbersUuidArgumentResolver; import de.ph87.tools.user.uuid.UserPrivateUuidArgumentResolver; import de.ph87.tools.user.uuid.UserPublicUuidArgumentResolver; import lombok.NonNull; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.springframework.data.web.config.EnableSpringDataWebSupport; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.resource.PathResourceResolver; import java.io.IOException; import java.util.List; import static org.springframework.data.web.config.EnableSpringDataWebSupport.PageSerializationMode.VIA_DTO; @Configuration @RequiredArgsConstructor @EnableSpringDataWebSupport(pageSerializationMode = VIA_DTO) public class WebConfig implements WebMvcConfigurer { @Override public void addArgumentResolvers(List argumentResolvers) { argumentResolvers.add(new UserPrivateUuidArgumentResolver()); argumentResolvers.add(new UserPublicUuidArgumentResolver()); argumentResolvers.add(new GroupUuidArgumentResolver()); argumentResolvers.add(new NumbersUuidArgumentResolver()); } @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**").allowCredentials(true).allowedOriginPatterns("*").allowedMethods("*"); } @Override public void addResourceHandlers(final ResourceHandlerRegistry registry) { registry .addResourceHandler("/**") .addResourceLocations("classpath:/resources/") .resourceChain(true) .addResolver(new PathResourceResolver() { protected Resource getResource(@NonNull String resourcePath, @NonNull Resource roomLocation) throws IOException { final Resource requestedResource = roomLocation.createRelative(resourcePath); return requestedResource.exists() && requestedResource.isReadable() ? requestedResource : new ClassPathResource("/resources/index.html"); } }); } }