从spring boot到spring cloud(八)Access-Control-Allow-Origin解决跨域问题

前后端分离以后,因为不在同一个域名下面,前端调用后端接口时候如果没有设置允许跨域就会报Access-Control-Allow-Origin错误。

第一种:重写WebMvcConfigurer实现全局跨域

先继承implements WebMvcConfigurer。然后实现addCorsMappings方法,配置参数。

/*
 * 1、addMapping 允许访问路径
 * 2、allowedOrigins 添加跨域请求来源
 * 3、allowedMethods 允许跨域的方法
 * 4、allowCredentials 是否允许携带信息
 * 5、maxAge 最大响应时间
 * 6、allowedHeaders 允许访问请求头
 */
@ComponentScan(basePackages={"com.douyin.*"})
@SpringBootApplication
@EnableAsync
@MapperScan("com.douyin.dao")
public class DouyinWebApplication implements WebMvcConfigurer{

	public static void main(String[] args) {
		SpringApplication.run(DouyinWebApplication.class, args);
	}
	@Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
        .allowedOrigins("*")
        .allowedMethods("*") //.allowedMethods("PUT", "DELETE","POST","GET")
        .allowedHeaders("*")
        .allowCredentials(true)
        .maxAge(3600);
    }
}

第二种:类注解,允许当前类中所有的方法跨域

        通过在Controller层配置注解的方式设置跨域,通过@CrossOrigin(origins = "*")配置允许当前Controller下所有的方法跨域。

//@CrossOrigin(value = "http://localhost:8080",maxAge = 3600,allowedHeaders = "*")
@RestController
@CrossOrigin(origins = "*")
public class UserController {

    @RequestMapping(value="/login",method = RequestMethod.POST)
    public String login() {
        return "hello world";
    }
}

第三种:方法注解

  通过在方法上配置@CrossOrigin(origins = "*")实现方法的跨域

//@CrossOrigin(value = "http://localhost:8080",maxAge = 3600,allowedHeaders = "*")
@RequestMapping("/login")
@CrossOrigin(origins = "*")
public String login() {
     return "hello world";
}

以上三种方式第一种最常用。第二种和第三种的使用场景大多是做第三方服务或者是安全性比较高的系统时候使用。

你可能感兴趣的:(spring,spring,boot,java,跨域)