精华内容
下载资源
问答
  • Cross-Origin Resource Sharing (CORS) 是W3c工作草案,它定义了在跨域访问资源时浏览器和服务器之间如何通信。CORS背后的基本思想是使用自定义的HTTP头部允许浏览器和服务器相互了解对方,从而决定请求或响应成功...

    什么是跨域

    跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。
    什么情况下不是跨域?
    即:满足域名、协议、端口均相同的即不是跨域。

    cors介绍

    Cross-Origin Resource Sharing (CORS) 是W3c工作草案,它定义了在跨域访问资源时浏览器和服务器之间如何通信。CORS背后的基本思想是使用自定义的HTTP头部允许浏览器和服务器相互了解对方,从而决定请求或响应成功与否。
    cors与jsonp对比
    CORS与JSONP相比,更为先进、方便和可靠。
    1、 JSONP只能实现GET请求,而CORS支持所有类型的HTTP请求。
    2、 使用CORS,开发者可以使用普通的XMLHttpRequest发起请求和获得数据,比起JSONP有更好的错误处理。
    3、 JSONP主要被老的浏览器支持,它们往往不支持CORS,而绝大多数现代浏览器都已经支持了CORS。
    对一个简单的请求,没有自定义头部,要么使用GET,要么使用POST,它的主体是text/plain,请求用一个名叫Orgin的额外的头部发送。Origin头部包含请求页面的头部(协议,域名,端口),这样服务器可以很容易的决定它是否应该提供响应。
    服务器端对于CORS的支持,主要就是通过设置Access-Control-Allow-Origin来进行的。
    Header set Access-Control-Allow-Origin *
    为了防止XSS攻击我们的服务器, 我们可以限制域,比如
    Access-Control-Allow-Origin: http://baidu.com

    代码实现

    方法一(使用Filter过滤器)
    
    @Component
    public class CrossFilter implements Filter {
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
    HttpServletResponse response = (HttpServletResponse) res;
    //如果要做细的限制,仅限某域名下的可以进行跨域访问到此,可以将改为对应的域名。
    response.setHeader("Access-Control-Allow-Origin", "*");//所有请求
    response.setHeader("Access-Control-Allow-Methods", "");
    response.setHeader("Access-Control-Max-Age", "1728000");
    response.setHeader("Access-Control-Allow-Credentials", "true");
    response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    chain.doFilter(req, res);
    }
    public void init(FilterConfig filterConfig) {}
    public void destroy() {}
    }
    
    方法二(使用AOP)
    
    //证明是一个配置文件(使用@Component也可以,因为点入后会发现@Configuration还是使用了@Component)
    @Configuration
    //证明是一个切面
    @Aspect
    public class ControllerAOP {
    //环绕aop
    //execution表达式 此表达式表示扫描controller下所有类的所有方法都执行此aop
    @Around("execution ( com.controller...(..))")
    public Object testAop(ProceedingJoinPoint pro) throws Throwable {
    //获取response
    HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
    //核心设置
    response.setHeader("Access-Control-Allow-Origin", "*");
    //执行调用的方法
    Object proceed = pro.proceed();
    return proceed;
    }
    }
    
    方法三(springboot项目)
    在启动类中添加一下代码
    
    
        @Bean
        public WebMvcConfigurer corsConfigurer() {
            return new WebMvcConfigurerAdapter() {
                @Override
                public void addCorsMappings(CorsRegistry registry) {
                    registry.addMapping("/**");
                }
            };
        }
    

     

    展开全文
  • 本篇文章主要介绍了Java实现CORS跨域请求的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 本篇文章主要介绍了Java利用cors实现跨域请求实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 之前在开发实验室的一个云服务,主要后端是使用java基于jfinal框架。我们在开发中遇到了一个小小的问题,由于我们开发通常是将前后端分离利用AJAX进行交互的。但是AJAX是不允许跨域的哦,那么问题来了,我们该如何...

    之前在开发实验室的一个云服务,主要后端是使用java基于jfinal框架。我们在开发中遇到了一个小小的问题,由于我们开发通常是将前后端分离利用AJAX进行交互的。但是AJAX是不允许跨域的哦,那么问题来了,我们该如何进行跨域AJAX呢?

    一、什么是AJAX?

    Asynchronous JavaScript and XML (Ajax ) 是驱动新一代 Web 站点(流行术语为 Web 2.0 站点)的关键技术。Ajax 允许在不干扰 Web 应用程序的显示和行为的情况下在后台进行数据检索。使用 XMLHttpRequest 函数获取数据,它是一种 API,允许客户端 JavaScript 通过 HTTP 连接到远程服务器。Ajax 也是许多 mashup 的驱动力,它可将来自多个地方的内容集成为单一 Web 应用程序。

    二、为什么会有这个问题?

    ajax本身实际上是通过XMLHttpRequest对象来进行数据的交互,而浏览器出于安全考虑,不允许js代码进行跨域操作,所以会警告。

    三、常见解决办法

    (1)使用script标签。

    script调用没有域的限制,我们可以将输出的数据伪装成script的变量。

    (2)服务端脚本中转

    服务端脚本使用XMLHTTP没有域的限制,但是耗费服务器的资源。

    (3)利用iframe

    在同一个域名的各个子域名下,如果设置了document.domain,那么是可以相互调用JS的。

    (4)JSONP

    这个方法也是最解决正常AJAX和多人使用的。

    JSONP(JSON with Padding)是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式)。

    首先在客户端注册一个callback, 然后把callback的名字传给服务器。

    此时,服务器先生成 json 数据。

    然后以 javascript 语法的方式,生成一个function , function 名字就是传递上来的参数 jsonp.

    最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端。

    客户端浏览器,解析script标签,并执行返回的 javascript 文档,此时数据作为参数,传入到了客户端预先定义好的 callback 函数里.(动态执行回调函数)。

    (5)CORS

    这也是我们这次采用的解决办法。

    5ee2642fefb2ef7dfd87fefbc19ef9b1.png

    CORS-CrossOrigin Resources Sharing,也即跨源资源共享,它定义了一种浏览器和服务器交互的方式来确定是否允许跨域请求。它是一个妥协,有更大的灵活性,但比起简单地允许所有这些的要求来说更加安全。简言之,CORS就是为了让AJAX可以实现可控的跨域访问而生的。

    但是CORS也具有一定的风险性,比如请求中只能说明来自于一个特定的域但不能验证是否可信,而且也容易被第三方入侵。

    四、在jfinal中使用CORS

    在jfinal中使用cors非常简单,这是得益于有cors的支持库。我们也将这个支持库上传到了我们的CDN服务器上。

    (1)在开发项目中加入支持库

    (2)修改web.xml,增加以下代码

    CORS

    com.thetransactioncompany.cors.CORSFilter

    cors.allowOrigin

    *

    cors.supportedMethods

    GET, POST, HEAD, PUT, DELETE

    cors.supportedHeaders

    Accept, Origin, X-Requested-With, Content-Type, Last-Modified

    cors.exposedHeaders

    Set-Cookie

    cors.supportsCredentials

    true

    CORS

    /*

    注意cors的拦截需要在jfinal之前!

    (3)使用例子,我们这里用的是jQuery,其它框架类似。

    $("#login").click(function() {

    $.ajax("http://测试地址", {

    type: "POST",

    xhrFields: {

    withCredentials: true,

    useDefaultXhrHeader: false

    },

    data: {

    username: "测试",

    password: "测试"

    },

    crossDomain: true,

    success: function(data, status, xhr) {

    }

    });

    });

    五、总结

    cors这种解决方案不知道是为什么在国内很少能看到,甚至于百度搜索时都搜不到。我们实验室也在尝试着使用这项技术解决跨域问题,如果大家有什么更好的办法或者是遇到了问题我们可以一起探讨和解决哦!

    展开全文
  • 记录cors跨域错误

    千次阅读 2020-12-24 03:38:50
    由于公司使用的是spring boot + spring cloud 将开发全部微服务化了,在微服务的过程中将前后端完全分离了。我们公司前端使用一个域名、后端api使用一个域名,这样前后端...这样的问题我们只需要在后端加入cors配...

    由于公司使用的是spring boot + spring cloud 将开发全部微服务化了,在微服务的过程中将前后端完全分离了。我们公司前端使用一个域名、后端api使用一个域名,这样前后端之间就产生了跨域问题。

    常见跨域问题

    我们最常见的跨域问题就是浏览器提示在A域名下不可以访问B域名的api,这样的错误很好解决,我们的解决方式是基于springboot框架的。

    这样的问题我们只需要在后端加入cors配置,就可以解决这类跨域问题,我们在springmvc的java配置中加入以下代码即可

    @Bean

    @ConditionalOnProperty(name = jhipster.cors.allowed-origins")

    public CorsFilter corsFilter() {

    log.debug("Registering CORS filter");

    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();

    CorsConfiguration config = jhipsterProperties.getCors();

    source.registerCorsConfiguration("/api/**", config);

    source.registerCorsConfiguration("/v2/api-docs", config);

    source.registerCorsConfiguration("/oauth/**", config);

    source.registerCorsConfiguration("/*/api/**", config);

    source.registerCorsConfiguration("/*/oauth/**", config);

    source.registerCorsConfiguration("/**", config);

    return new CorsFilter(source);

    }

    多值跨域问题

    错误信息:

    The 'Access-Control-Allow-Origin' header contains multiple values 'http://localhost:7080,http://localhost:7080', but only one is allowed. Origin 'http://localhost:7080' is therefore not allowed access.

    错误信息很好理解,就是说Access-Control-Allow-Origin有两个值,但是浏览器只准许有一个值,所以报错。

    我们查看浏览器中的网络请求:

    我们发现在 response headers 中 Access-Control-Allow-Origin 出现了两次。由于是在 response 中这说明我们是在后端出现的问题。

    由于我们的后端属于标准的微服务架构,也就是:

    front -> api gateway -> other Micro service

    由于我已经在 api gateway 项目中已经加入了 cors,那么在 api 网关(gateway)后面的微服务不在需要加入 cors 了。由于小伙伴在后端的微服务项目中也同样加入了cors,这样在返回的response中就加入了两个相同的跨域header,这样浏览器发现多个Access-Control-Allow-Origin于是就报错了。

    找到原因错误就很好解决了,我们只需要在小伙伴的后端将cors跨域配置删除即可,只保留API gateway 项目的cors配置。

    展开全文
  • java配置跨域springboot配置Cors跨域

    万次阅读 2018-02-02 15:11:03
    springboot配置Cors跨域java最简单配置跨域解决方案 现在前后分离已经是很常见的一种开发方式了,所以难免会遇到跨域问题,之前用的比较多的是jsonp(本人表示没用过),之前我遇到这种问题一般都是用nginx做...

    springboot配置Cors跨域、java最简单配置跨域解决方案

    aiprose 个人随笔上线,网址 aiprose.com 点击访问

    现在前后分离已经是很常见的一种开发方式了,所以难免会遇到跨域问题,之前用的比较多的是jsonp(本人表示没用过),之前我遇到这种问题一般都是用nginx做反向代理实现跨域请求。

    不过springmvc4.2版本增加了对cors的支持,所以解决办法就更简单了,后端一个全局配置轻松解决跨域问题,比之前的都简单轻松。 cors协议不懂的可以百度哦,这里就不废话了。

    由于现在大部分项目都是基于springboot做的,目前微服务的开发模式也很火,所以这块就用springboot做案例,用xml配置方式的自己看着改。

    1、 全局配置

    @Configuration
    public class WebAppConfigurer extends WebMvcConfigurerAdapter {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**")
    		        //.allowedOrigins("http://192.168.89.89")
                    .allowedMethods("GET", "POST","DELETE")
                    .allowCredentials(false).maxAge(3600);
        }
    }
    

    2、单个接口配置

        @CrossOrigin(origins = "*", maxAge = 3600) //* 可以改成ip地址
        @PostMapping("save")
        public ResponseEntity<Result> addNote(@RequestParam String noteName){
    

    3、 微服务相关帖子

    微服务架构搭建:Consul+sleuth+zipkin+Feign/Ribbon+SpringConfig+Zuul+Hystrix Dash-Board-Turbine

    springcloud微服务实战:Eureka+Zuul+Feign/Ribbon+Hystrix Turbine+SpringConfig+sleuth+zipkin

    关注

    aiprose 个人随笔上线,网址 aiprose.com 点击访问

    如果有问题,请在下方评论,或者加群讨论 200909980

    关注下方微信公众号,可以及时获取到各种技术的干货哦,如果你有想推荐的帖子,也可以联系我们的。

    这里写图片描述

    展开全文
  • 跨域CORS详解

    2020-12-29 14:22:14
    目录 什么是跨域 两种跨域请求 简单请求 预检请求 非简单请求 同源策略 解决方法 nginx代理 前端解决方法 后台配置 什么是跨域 CORS通俗地译为跨域资源共享,指的是浏览器不能执行其他网站的脚本。它是由浏览器的...
  • 积分多的大佬打赏下,缺积分用;积分不够得移步https://www.cnblogs.com/BambooLamp/p/12603299.html 原文:https://segmentfault.com/a/1190000012469713
  • Spring MVC 从4.2版本开始增加了对CORS的支持,可以全局配置,也可以对类或方法配置;可以通过Java代码,也可以通过xml配置方式。...Java配置新建一个类,做跨域的配置@Configuration@EnableWebMvcpublic ...
  • https://blog.coding.net/blog/spring-mvc-cors 这篇文章很详细的介绍了JS的跨域,给出的解决方案是springboot的方式,假如不用spring boot 或者 spring版本低于4.2就需要自己实现;参考了spring boot的实现方式,并...
  • 问题描述:浏览器跨域请求由 keycloak adapter 保护的后端服务,后端服务设置为允许跨域,非简单请求时,预检是通过的,无论简单请求还是非简单请求,如果请求不携带Token的话,虽然后端服务成功执行了,但是,响应...
  • spring cloud gateway 跨域CORS 配置 yml配置方式: spring: cloud: gateway: routes: - id: after_route uri: https://example.org predicates: - Cookie=mycookie,mycookievalue 代码方式 这种适合...
  • 处理步骤: 1.删除前台请求头信息,下面红框位置 2.后台增加如下类 ...import org.springframework.context.annotation.Bean;...import org.spring...import org.springframework.web.cors.CorsConfiguration; imp.
  • 包括跨域CORS jar包cors-filter-1.7.jar,java-property-utils-1.9.jar,及geoserver(或tomcat)跨域问题解决方案.txt、web - (示例).xml
  • 跨域 CORS policy

    万次阅读 2020-08-19 15:21:43
    Angular + SpringBoot 项目跨域问题 ​ 由于项目的需要,最近一段时间都在学习Angular,正好之前无聊写了一个后端的CRUD的demo,索性就将前后端整合起来。 ​ 整体的思路是,前端由Angular发送一个get请求(import ...
  • 跨域 CORS Access-Control-Allow-Origin cors-filter-2.6.jar java-property-utils-1.9.1.jar
  • Java实现CORS跨域请求

    2021-02-02 18:13:36
    使用前后端分离模式开发项目时,往往会遇到这样一个问题 -- 无法跨域获取服务端数据 ...在这里我主要分享一下CORS这种解决方式,CORS即“跨域资源共享”,它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从
  • Tomcat lib目录下添加cors-filter-1.7.jar,java-property-utils-1.9.jar这两个jar包,项目中web.xml 中添加filter,以及出现OPTIONS 类型的请求并返回403的解决方案;压缩文件包含jar文件,以及web.xml配置。
  • 由于ajax本身实际上是通过XMLHttpRequest对象来进行数据的交互,而浏览器出于安全考虑,不允许js代码进行跨域操作,所以会警告网站开发,在某些情况下需要用到跨域。什么是跨域跨域,指的是浏览器不能执行其他网站...
  • 找了一下午的资料,大部分都是一篇...具体实现:javaWeb项目web.xml增加Filter如下:CORScom.thetransactioncompany.cors.CORSFiltercors.allowOrigin*cors.supportedMethodsGET, POST, HEAD, PUT, DELETEcors.suppo...
  • 重定向 CORS 跨域请求

    千次阅读 2021-03-13 08:01:08
    TL;DR非简单请求不可重定向,包括第...中间服务器设置当跨域请求被重定向时,中间服务器返回的 CORS 相关的响应头应当与最终服务器保持一致。 任何一级的 CORS 失败都会导致 CORS 失败。这些头字段包括Access-Contr...
  • nginx 配置location ~ ^/dingdang-cms/.*${#add_header 'Access-Control-Allow-Origin' 'http://192.168.2.7:6970' always;#如果使用此配置则只能为http://192.168.2.7:6970的域名可以访问add_header 'Access-...
  • 跨域CORS

    2021-03-23 09:39:23
    what is 跨域? Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实 现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。 所谓同源(即指在同一个域)就是两个页面具有相同的协议...
  • 编写CorsConfig配置类 ... import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.spring...import org.springframework.web.cors.UrlBase
  • 1.实现接口WebMvcConfigurer的addCorsMappings方法,配置addMapping,allowedOrigins,allowedHeaders,allowedMethods的属性。设置“*”表示“所有”的意思对于只开放某个域访问,通过allowedOrigins方法设置。...
  • import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;impo...
  • SpringCloud Gateway跨域CORS问题解决方案

    千次阅读 2020-12-18 22:27:20
    最近使用SpringCloud搭建微服务,使用Gateway网关统一对外提供API接口,项目使用前后端分离,前端开发对接接口的时候抛出接口提示跨域问题不能调用。才注意到Gateway网关没有跨域相应的配置,默认情况下,是不允许...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,950
精华内容 6,780
关键字:

java跨域cors

java 订阅