SpringBoot通过Cors解决跨域问题(三十一)下

简介: SpringBoot通过Cors解决跨域问题(三十一)下

二. Cors 解决跨域文案

针对的都是服务提供者端, SpringBoot_Cors_Provider 项目里面进行操作.

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CrossOrigin {
  @Deprecated
  String[] DEFAULT_ORIGINS = {"*"};
  @Deprecated
  String[] DEFAULT_ALLOWED_HEADERS = {"*"};
  @Deprecated
  boolean DEFAULT_ALLOW_CREDENTIALS = false;
  @Deprecated
  long DEFAULT_MAX_AGE = 1800;
  @AliasFor("origins")
  String[] value() default {};
  @AliasFor("value")
  String[] origins() default {};
  String[] allowedHeaders() default {};
  String[] exposedHeaders() default {};
  RequestMethod[] methods() default {};
  String allowCredentials() default "";
  long maxAge() default -1;
}


可以在类上,也可以在方法上.


通常使用 origins 属性 和 maxAge 属性, 为-1 表示永不过期.


二.一 单方法 单类处理

二.一.一 单方法

添加 @CrossOrigin 注解, 用 origins 属性来指定

//端口号后面不能跟  /
    @CrossOrigin(origins = "http://localhost:8082")
    @GetMapping("/findById")
    @ResponseBody
    public User findById(Integer id){
        User user=new User();
        user.setId(id);
        user.setName("两个蝴蝶飞");
        user.setDescription("Get 提交 跨域问题");
        return user;
    }


只能是 http 协议, localhost 主机, 8082 端口的请求可以访问


重启服务,再次请求,就可以获取到了

image.png


@PostMapping("/addUser")
    @ResponseBody
    @CrossOrigin(origins = "*")
    public User addUser(@RequestBody  User user){
        //补充信息
        user.setName("岳泽霖");
        user.setDescription("POST提交 跨域问题");
        return user;
    }


origins="*" ,表示所有的协议,所有的主机 ,所有的端口 均可以访问.


重启服务器,再次进行请求

image.png



是可以的。


这是针对每一个方法的。 如果一个类里面,方法过多,显然这种方式是不合理的.


二.一.二 单类

在类上添加该注解

@Controller
@CrossOrigin(origins = "*")
public class InfoController {
}


则这个类下面的所有的方法,都可以 进行跨域访问。


当类过多时,这种方式也不太友好。


二.二 CorsConfig 配置全局性跨域

在 config 目录下,创建 CorsConfig 配置类

@Configuration
public class CorsConfig {
    @Bean
    public FilterRegistrationBean corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);
        //设置你要允许的网站域名,如果全允许则设为 *
        config.addAllowedOrigin("*");
        //config.addAllowedOrigin("http://localhost:8082");
        //设置要限制的Header和Method
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");
        source.registerCorsConfiguration("/**", config);
        FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
        //bean注册顺序
        bean.setOrder(0);
        return bean;
    }
}


同样是可以的.


image.png


二.三 添加 Cors映射

在 WebConfig 目录下, 添加相应的 cors 映射 配置

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
    /**
     * 配置静态的资源信息
     * @param registry
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
        //映射 static 目录
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
        //放置其他 业务页面资源
        registry.addResourceHandler("/**").addResourceLocations("classpath:/templates/");
    }
    /**
     进行添加配置
     */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                //是否发送Cookie
                .allowCredentials(true)
                //放行哪些原始域
                .allowedOrigins("*")
                .allowedMethods("*")
                .allowedHeaders("*")
                .allowCredentials(true);
    }
}


同样是可以的

image.png

但是,通过这种方式配置的话, 自定义的拦截器会不生效。


一般采用的,都是第二种方式 CorsConfig


相关文章
|
17天前
|
前端开发 安全 JavaScript
Spring Boot2 系列教程(十四)CORS 解决跨域问题
Spring Boot2 系列教程(十四)CORS 解决跨域问题
|
9天前
|
前端开发 安全 JavaScript
Spring Boot中如何处理跨域请求(CORS)
Spring Boot中如何处理跨域请求(CORS)
|
9天前
|
Web App开发 JSON 数据格式
【Azure Developer】浏览器查看本地数据文件时遇见跨域问题(CORS)
Access to XMLHttpRequest at 'file:///C:/Users/.../failedrequests.json' from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, isolated-app, chrome-extension, chrome-untrusted, https, edge. reportdata/failedrequests.json:1 Fail
|
15天前
|
安全 前端开发 中间件
中间件在API跨域资源共享(CORS)
【6月更文挑战第16天】
26 7
|
9天前
|
前端开发 安全 Java
Spring Boot中的CORS配置
Spring Boot中的CORS配置
|
10天前
|
安全 前端开发 JavaScript
CORS是W3C标准,解决浏览器同源策略限制的跨域数据访问。
【6月更文挑战第27天】CORS是W3C标准,解决浏览器同源策略限制的跨域数据访问。它通过服务器在HTTP响应头添加`Access-Control-Allow-*`字段允许特定源请求。简单请求无需预检,非简单请求会发OPTIONS预检请求。服务器配置CORS策略,客户端正常请求,浏览器自动处理。若未正确配置,浏览器将阻止响应,保障安全。
12 0
|
Java
SpringBoot 2.7.0 处理跨域的问题
SpringBoot 2.7.0 处理跨域的问题
682 0
|
Java
SpringBoot 2.6.7 处理跨域的问题
SpringBoot 2.6.7 处理跨域的问题
265 0
|
1天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的学生成绩管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的学生成绩管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
16 0
|
1天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的校园论坛系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的校园论坛系统的详细设计和实现(源码+lw+部署文档+讲解等)
8 0