webmvcconfigurer配置跨域指定服务器
时间: 2023-03-30 10:01:41 浏览: 106
可以回答这个问题。在 WebMvcConfigurer 中,可以通过 addCorsMappings 方法来配置跨域访问。可以指定允许跨域的请求路径、允许的请求方法、允许的请求头、允许的响应头等信息。同时,还可以指定允许跨域的服务器地址。
相关问题
springboot配置跨域的问题
### 如何在Spring Boot中正确配置CORS
#### 一、理解CORS机制
为了保障Web应用程序安全,浏览器实施了同源策略(SOP),它阻止了一个源加载的文档或脚本对另一个源上的资源发起请求。然而,在实际开发过程中,确实存在需要跨越不同源获取资源的需求。此时便引入了跨域资源共享(Cross-Origin Resource Sharing, CORS)[^1]。
#### 二、全局配置方式
对于整个应用都需要支持跨域的情况,可以在`application.properties`文件里设置通用属性或者创建一个过滤器来实现全局范围内的跨域访问控制:
```properties
spring.mvc.cors=true
```
另外一种更灵活的方法是在启动类或者其他配置类上添加如下代码片段:
```java
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")// 对所有的路径都生效
.allowedOrigins("*") // 允许所有来源
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") // 支持HTTP动词
.maxAge(3600)// 预检请求的有效期为一个小时
.allowCredentials(true); // 是否允许发送Cookie
}
}
```
需要注意的是,当设置了`allowCredentials(true)`时,则不允许将`allowedOrigins`设为通配符"*"[^2]。
#### 三、局部配置方式
如果只需要针对特定接口开放跨域权限的话,可以采用`@CrossOrigin`注解的方式来进行细粒度管理。此注解可以直接作用于Controller层中的方法之上:
```java
@RestController
@RequestMapping("/api")
public class MyController {
@GetMapping("/data")
@CrossOrigin(origins = {"http://example.com"}, allowCredentials="true")
public ResponseEntity<String> getData() {
return new ResponseEntity<>("Data from server.", HttpStatus.OK);
}
}
```
上述例子表明只允许来自`http://example.com`的请求,并且启用了凭证共享功能[^3]。
#### 四、指定IP地址作为合法源站
有时候可能还需要精确到具体的服务器实例才能完成授权操作,比如基于内网环境下的服务间调用场景。这时候就需要明确指出哪些IP地址是可以信任并给予其相应的权限:
```java
@Override
protected Filter[] getServletFilters() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
List<String> allowedOrigins = Arrays.asList(
"http://192.168.3.16:9999"
);
config.setAllowedOrigins(allowedOrigins);
source.registerCorsConfiguration("/**", config.applyPermitDefaultValues());
return new Filter[]{new CorsFilter(source)};
}
```
注意这里的URL格式应当严格按照规范书写,即包含协议部分以及端口号等必要组件;同时也要考虑到具体的应用上下文路径是否会对最终效果造成影响[^4]。
springcloud怎么在服务器端配置 Access-Control-Allow-Origin 字段,允许跨域请求。
在Spring Cloud中,可以通过配置WebMvcConfigurer来实现在服务器端配置Access-Control-Allow-Origin字段,允许跨域请求。具体步骤如下:
1. 新建一个类,实现WebMvcConfigurer接口。
```java
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("*")
.allowedHeaders("*")
.allowCredentials(true)
.maxAge(3600);
}
}
```
2. 在addCorsMappings方法中,设置allowedOrigins为"*",表示允许来自任何域的跨域请求。如果只想允许特定的域名访问,则可以将"*"替换为具体的域名,例如"http://localhost:8080"。allowedMethods设置为"*"表示允许所有HTTP方法,allowedHeaders设置为"*"表示允许所有请求头。allowCredentials设置为true表示允许发送cookie等凭证信息,maxAge表示在指定时间内,浏览器不需要再次发送预检请求。
3. 在Spring Boot启动类上添加注解@EnableWebMvc,启用WebMvcConfigurer配置。
```java
@SpringBootApplication
@EnableWebMvc
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
```
4. 重新运行应用程序,即可在响应头中看到Access-Control-Allow-Origin字段。
阅读全文