素材巴巴 > 程序开发 >

Java解决跨域的三种方式

程序开发 2023-09-15 11:20:17

跨域是开发中经常会遇到的问题,当协议(http/https),主机(www.baidu.com/www.360.com||http://137.220.35.89/ /http://137.220.35.90/),端口(localhost:80/localhost:81)有一者不同时,即为跨域请求,详见跨源资源共享(CORS) - HTTP | MDN跨源资源共享 (CORS)(或通俗地译为跨域资源共享)是一种基于 HTTP 头的机制,该机制通过允许服务器标示除了它自己以外的其它origin(域,协议和端口),这样浏览器可以访问加载这些资源。跨源资源共享还通过一种机制来检查服务器是否会允许要发送的真实请求,该机制通过浏览器发起一个到服务器托管的跨源资源的"预检"请求。在预检中,浏览器发送的头中标示有HTTP方法和真实请求中会用到的头。https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS

 在前后端分离项目中,经常会遇到跨域问题,Java中常用的三种解决方案如下:

  1. 使用注解 `@CrossOrigin`,标注在controller类的方法上或者controller类上
  2. crosFIlter
    @Beanpublic CorsWebFilter corsWebFilter(){// cors跨域配置对象CorsConfiguration configuration = new CorsConfiguration();configuration.addAllowedOrigin("*"); //设置允许访问的网络configuration.setAllowCredentials(true); // 设置是否从服务器获取cookieconfiguration.addAllowedMethod("*"); // 设置请求方法 * 表示任意configuration.addAllowedHeader("*"); // 所有请求头信息 * 表示任意// 配置源对象UrlBasedCorsConfigurationSource configurationSource = new UrlBasedCorsConfigurationSource();configurationSource.registerCorsConfiguration("/**", configuration);// cors过滤器对象return new CorsWebFilter(configurationSource);}//或者@Configuration
 public class CorsConfig {private CorsConfiguration buildConfig() {CorsConfiguration corsConfiguration = new CorsConfiguration();corsConfiguration.setAllowCredentials(true);  //sessionid 多次访问一致// 允许访问的客户端域名List allowedOriginPatterns = new ArrayList<>();allowedOriginPatterns.add("*");corsConfiguration.setAllowedOriginPatterns(allowedOriginPatterns);
 //        corsConfiguration.addAllowedOrigin("*"); // 允许任何域名使用corsConfiguration.addAllowedHeader("*"); // 允许任何头corsConfiguration.addAllowedMethod("*"); // 允许任何方法(post、get等)return corsConfiguration;}@Beanpublic CorsFilter corsFilter() {UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();source.registerCorsConfiguration("/**", buildConfig()); // 对接口配置跨域设置return new CorsFilter(source);}
 }
 

 3. 

WebMvcConfigurer

 //标注这个类是一个配置类
 @Configuration
 //实现 WebMvcConfigurer 接口
 public class CorsConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**")  //设置允许跨域访问的路径.allowedOriginPatterns("*")  //设置允许跨域访问的源.allowedMethods("*")  //允许跨域请求的方法.maxAge(168000)  //预检间隔时间.allowedHeaders("*")  //允许头部设置.allowCredentials(true);  //是否发送 cookie}
 }

标签:

素材巴巴 Copyright © 2013-2021 http://www.sucaibaba.com/. Some Rights Reserved. 备案号:备案中。