WebMvcConfigurer配置跨域用法介绍

WebMvcConfigurer是SpringMVC框架提供的一个配置接口,通过它我们可以修改SpringMVC底层的行为,比如拦截器、消息转换器、静态资源处理等。在此基础上,我们也可以用WebMvcConfigurer来实现跨域资源共享(CORS)的配置。

一、跨域资源共享

所谓跨域资源共享,就是在一个域名下的网页去请求另一个域名下的资源,这个请求是跨域请求。浏览器禁止跨域请求,所以需要通过一些方式来解决这个问题。使用CORS是最常见的方式之一。

二、用WebMvcConfigurer来配置CORS

WebMvcConfigurer提供了addCorsMappings方法,来实现CORS的配置。下面是一个简单的例子:

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**").allowedOrigins("*");
    }
}

以上代码配置了所有的路由都可以跨域请求,allowedOrigins方法接受一个String数组,指定允许请求的域名,如果传入’*'则表示对所有域名允许请求。

三、CORS的详细配置

  1. 允许的请求方法
    默认情况下,CORS只允许发送GET、POST和HEAD请求。如果需要允许其他类型的请求,可以使用allowedMethods方法:
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/api/**")
                .allowedOrigins("http://localhost:8080")
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
    }
}

以上代码配置了/api路径下所有的请求都可以跨域请求,允许的方法包括GET、POST、PUT、DELETE和OPTIONS。

  1. 允许的请求头
    默认情况下,CORS只允许发送一些基本的请求头,如Content-Type、Accept和Authorization等。如果需要自定义请求头,需要使用allowedHeaders方法:
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/api/**")
                .allowedOrigins("http://localhost:8080")
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
                .allowedHeaders("Authorization", "Content-Type", "Accept")
    }
}

以上代码配置了允许发送的自定义请求头,包括Authorization、Content-Type和Accept。

  1. 暴露的响应头
    除了请求头,浏览器还会过滤掉一些响应头,如Set-Cookie和Authorization等,这样是为了保障用户安全。如果需要暴露一些特定的响应头给客户端,需要使用exposedHeaders方法:
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/api/**")
                .allowedOrigins("http://localhost:8080")
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
                .allowedHeaders("Authorization", "Content-Type", "Accept")
                .exposedHeaders("Authorization")
    }
}

以上代码配置了将Authorization响应头暴露给客户端。如果不指定exposedHeaders,默认情况下不会将响应头暴露给客户端。

四、总结

通过WebMvcConfigurer配置跨域可以很方便地将CORS配置到SpringMVC应用中。在实际开发中,应该根据实际情况来灵活配置,以保障数据的安全性。

转载文章https://www.python100.com/html/BZX1V61K2C59.html

你可能感兴趣的:(项目开发,springBoot,springCloud,chrome,开发语言,java,spring)