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


相关文章
|
11天前
|
安全
CORS 跨域资源共享的实现原理
CORS 跨域资源共享的实现原理
|
23天前
|
Web App开发 JSON 数据格式
【Azure Developer】浏览器查看本地数据文件时遇见跨域问题(CORS)
【Azure Developer】浏览器查看本地数据文件时遇见跨域问题(CORS)
【Azure Developer】浏览器查看本地数据文件时遇见跨域问题(CORS)
|
23天前
|
API
【Azure Function】Function本地调试时遇见跨域问题(blocked by CORS policy)
【Azure Function】Function本地调试时遇见跨域问题(blocked by CORS policy)
【Azure Function】Function本地调试时遇见跨域问题(blocked by CORS policy)
|
1月前
|
安全 前端开发 Java
Web端系统开发解决跨域问题——以Java SpringBoot框架配置Cors为例
在Web安全上下文中,源(Origin)是指一个URL的协议、域名和端口号的组合。这三个部分共同定义了资源的来源,浏览器会根据这些信息来判断两个资源是否属于同一源。例如,https://www.example.com:443和http://www.example.com虽然域名相同,但由于协议和端口号不同,它们被视为不同的源。同源(Same-Origin)是指两个URL的协议、域名和端口号完全相同。只有当这些条件都满足时,浏览器才认为这两个资源来自同一源,从而允许它们之间的交互操作。
Web端系统开发解决跨域问题——以Java SpringBoot框架配置Cors为例
|
23天前
|
安全 开发者 UED
|
24天前
|
前端开发 JavaScript
【Azure 环境】前端Web通过Azure AD获取Token时发生跨域问题(CORS Error)
【Azure 环境】前端Web通过Azure AD获取Token时发生跨域问题(CORS Error)
|
2月前
|
安全
CORS 跨域资源共享的实现原理
CORS 跨域资源共享的实现原理
|
27天前
|
前端开发 应用服务中间件 API
"揭秘!面试官必问:你是如何巧妙绕过跨域难题的?前端代理VS服务器端CORS,哪个才是你的秘密武器?"
【8月更文挑战第21天】在软件开发中,尤其前后端分离架构下,跨域资源共享(CORS)是常见的挑战。主要解决方案有两种:一是服务器端配置CORS策略,通过设置响应头控制跨域访问权限,无需改动前端代码,增强安全性;二是前端代理转发,如使用Nginx或Webpack DevServer在开发环境中转发请求绕过同源策略,简化开发流程但不适用于生产环境。生产环境下应采用服务器端CORS策略以确保安全稳定。
27 0
|
前端开发 安全 JavaScript
SpringBoot通过Cors解决跨域问题(三十一)上
SpringBoot通过Cors解决跨域问题(三十一)上
255 0
SpringBoot通过Cors解决跨域问题(三十一)上
|
1天前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的旅游景区管理系统
基于Java+Springboot+Vue开发的旅游景区管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的旅游景区管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
14 4
基于Java+Springboot+Vue开发的旅游景区管理系统