错误描述:
Access to fetch at ‘http://localhost:9000/api/login/account’ from origin ‘http://localhost:8000’ 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. If an opaque response serves your needs, set the request’s mode to ‘no-cors’ to fetch the resource with CORS disabled.
解决方案:
在SpringBoot项目中添加以下两个文件WebMvcConfig
和,将代码直接复制粘贴进去即可。
笔者是新建了一个config包,在config包中新增了该文件,
截图如下:
CorsInterceptor.java
package com.example.demo.config;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @ClassName: CorsInterceptor
* @Description: TODO
* @Author: Shilin Wang
* @Date: 2021/5/2 11:34
* @Version: 1.0
*/
public class CorsInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x_requested_with,x-requested-with,Authorization,Content-Type,token");
response.setHeader("Access-Control-Allow-Credentials", "true");
return true;
}
}
WebMvcConfig.java
package com.example.demo.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @ClassName: WebMvcConfig
* @Description: TODO
* @Author: Shilin Wang
* @Date: 2021/5/2 11:36
* @Version: 1.0
*/
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Bean
public CorsInterceptor corsInterceptor() {
CorsInterceptor corsInterceptor = new CorsInterceptor();
return corsInterceptor;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(corsInterceptor())
.addPathPatterns("/**");
}
}
备注:
笔者第一次在解决加了允许跨域注解@CrossOrigin
,但是问题依旧没有解决,做了如下的设置与修改,问题解决!欢迎大家讨论