前后端分离
- 前端分离模式下请求跨域(一个域名到另一个域名)的场景
- 跨域COSR介绍
- 两种方式的配置-总有解决跨域的方式
·
一种是直接在方法上添加@CrossOrigin注解
,另一种是全局配置。全局配置在这里依然使用,但是默认的RESTful工程不需要开发者自己提供Controller
因此添加在Controller的方法上的注解可以直接写在BookRepository上
所有端点默认都没有开启跨域,使用时可以通过以下配置快速开启CORS支持,进而实现跨域:
application.properties配置
management.endpoints.web.cors.allowed-origins=http://localhost:8081
management.endpoints.web.cors.allowed-methods=GET,POST
注:如果使用下面两种方法就不需要application.properties配置此属性信息了
一般使用方法一就行了
配置跨域方式1:
@Configuration
public class CustomerMvcConfig extends WebMvcConfigurerAdapter{
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**") // 此方法包含下面4种方法,使用时只设置这个方法就可以了
.allowedOrigins("*")
.allowedHeaders("*")
.allowCredentials(true)
.allowedMethods("*");
}
}
配置跨域方式2:
@Component
public class CustomerMvcConfigV2 implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
HttpServletRequest request = (HttpServletRequest) req;
//TODO:简单来说,CORS是一种访问机制,英文全称是Cross-Origin Resource Sharing
//TODO:即我们常说的跨域资源共享,通过在服务器端设置响应头,把发起跨域的原始域名添加到Access-Control-Allow-Origin 即可
response.setHeader("Access-Control-Allow-Origin",request.getHeader("Origin"));
response.setHeader("Access-Control-Allow-Credentials", "true");
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");
chain.doFilter(req, res);
}
public void destroy() {
}
}