问题背景
前端Vue框架项目搭建测试的时候打开调试界面报错同源跨域问题
解决方法
WebMvcConfigurer 是 Spring 框架中一个非常重要的接口,它允许开发者在使用 Spring MVC 时自定义和配置 Web MVC 的各种行为。WebMvcConfigurer 接口提供了一组默认方法,这些方法可以用来配置 Spring MVC 的各个方面,例如视图解析、消息转换器、拦截器等。
配置跨域请求处理(CORS )
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowCredentials(true)
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
.maxAge(3600);
}
}
WebMvcConfigurer 其他常用配置
- 配置拦截器:
default void addInterceptors(InterceptorRegistry registry) {
// 添加自定义拦截器
}
- 配置视图解析器:
default void configureViewResolvers(ViewResolverRegistry registry) {
// 配置视图解析器
}
- 配置内容协商:
default void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
// 配置内容协商策略
}
- 配置消息转换器:
default void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
// 配置消息转换器
}
- 配置静态资源处理:
default void addResourceHandlers(ResourceHandlerRegistry registry) {
// 配置静态资源处理
}
- 配置路径匹配选项:
default void configurePathMatch(PathMatchConfigurer configurer) {
// 配置路径匹配选项
}
- 配置返回值处理器:
default void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> handlers) {
// 配置返回值处理器
}
- 配置请求参数解析器:
default void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
// 配置请求参数解析器
}
示例:配置自定义拦截器和视图解析器
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class MyWebMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 添加自定义拦截器
registry.addInterceptor(new MyCustomInterceptor()).addPathPatterns("/**");
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// 配置静态资源处理
registry.addResourceHandler("/static/**")
.addResourceLocations("classpath:/static/");
}
}