可我是加上了这个注解还报的错Access to XMLHttpRequest at 'http://192.168.1.102:8088/did/user/update' from origin 'http://localhost:8080' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. xhr.js:220 POST http://192.168.1.102:8088/did/user/update net::ERR_FAILED
时间: 2023-07-24 22:44:56 浏览: 145
XMLHttpRequest_test:XMLHttpRequest学习代码
如果加上了 @CrossOrigin 注解还是出现这个错误,可能是因为你的服务器没有正确地处理 OPTIONS 请求。在跨域请求中,浏览器会先发送一个 OPTIONS 请求,询问服务器是否允许跨域请求。服务器需要正确地响应这个 OPTIONS 请求,以便浏览器可以确定是否允许跨域请求。
你可以在服务器端的响应中添加 Access-Control-Allow-Origin 头,以允许来自前端应用程序的跨域请求。同时,还需要添加 Access-Control-Allow-Methods 和 Access-Control-Allow-Headers 头,以指定允许的 HTTP 方法和请求头。例如,在 Spring Framework 中,你可以使用 @RequestMapping 注解的 headers 属性,来指定允许的请求头。例如:
```
@RequestMapping(value = "/did/user/update", method = RequestMethod.OPTIONS, headers = "Access-Control-Allow-Headers=Content-Type")
public ResponseEntity<?> allowOptions() {
return ResponseEntity.ok().header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE")
.header("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Requested-With")
.header("Access-Control-Max-Age", "3600").build();
}
```
在这个例子中,我们在 /did/user/update 路径下添加了一个 OPTIONS 请求处理方法,用于响应浏览器的预检请求。其中,Access-Control-Allow-Headers 头指定了允许的请求头;Access-Control-Allow-Methods 头指定了允许的 HTTP 方法;Access-Control-Max-Age 头指定了预检请求的缓存时间。你可以根据你的应用程序的需要,调整这些头的值。
注意,如果你使用了 Spring Security,还需要添加一个 SecurityFilterChain,以确保跨域请求可以正确地通过 Spring Security 验证。例如:
```
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers(HttpMethod.OPTIONS, "/**").permitAll()
.anyRequest().authenticated()
.and().httpBasic();
}
}
```
在这个例子中,我们在 SecurityConfig 类中添加了一个 SecurityFilterChain,用于处理跨域请求。其中,我们使用了 .antMatchers(HttpMethod.OPTIONS, "/**").permitAll() 来允许所有的 OPTIONS 请求。你可以根据你的应用程序的需要,调整这个配置。
阅读全文