精华内容
下载资源
问答
  • 最近vue项目,调用java服务是,一直报错: Access to XMLHttpRequest at ‘https://gw-api.pinduoduo.com/api/router?type=pdd.ddk.top.goods.list.query&p_id=9182619_112123568&sort_type=1&offset=20...

    最近vue项目,调用java服务是,一直报错:
    Access to XMLHttpRequest at ‘https://gw-api.pinduoduo.com/api/router?type=pdd.ddk.top.goods.list.query&p_id=9182619_112123568&sort_type=1&offset=20&limit=20&client_id=ae75c3d8bb1c4259893193fb79c242a7&timestamp=1575366417424&data_type=JSON&sign=B64BBCC6BCD534E18E777D3321A993AF’ from origin ‘http://localhost:3000’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.

    请求跨域问题,需要在java服务端设置允许跨域,具体代码如下:

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.cors.CorsConfiguration;
    import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
    import org.springframework.web.filter.CorsFilter;
    
    /**
     * 允许跨域请求
     */
    @Configuration
    public class CorsConfig {
        private CorsConfiguration buildConfig() {
            CorsConfiguration corsConfiguration = new CorsConfiguration();
            corsConfiguration.addAllowedOrigin("*"); //允许任何域名
            corsConfiguration.addAllowedHeader("*"); //允许任何头
            corsConfiguration.addAllowedMethod("*"); //允许任何方法
            return corsConfiguration;
        }
    
        @Bean
        public CorsFilter corsFilter() {
            UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
            source.registerCorsConfiguration("/**", buildConfig()); //注册
            return new CorsFilter(source);
        }
    }
    
    展开全文
  • 最近使用VUE开发前后端分离,登录后,...1.后台servlet过滤器在原有允许跨域基础上增加 response.setHeader("Access-Control-Allow-Credentials", "true");//允许携带cookie 此时Access-Control-Allow-Origin不能.

    最近使用VUE开发前后端分离,登录后,后端存入用户信息到session,前端http axios异步请求获取不到sesion,查看http请求头发现http headers未携带cookie,

    然后查资料后按照以下步骤解决,记录下,怕忘记...

    1.后台servlet过滤器在原有允许跨域基础上增加

    response.setHeader("Access-Control-Allow-Credentials", "true");//允许携带cookie

    此时Access-Control-Allow-Origin不能设置*,否则前端访问后端接口会报错提示,

     //当Access-Control-Allow-Credentials为true是 Access-Control-Allow-Origin不能为*
            response.setHeader("Access-Control-Allow-Origin", "http://127.0.0.1:8080"); //解决跨域访问报错
            response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
            response.setHeader("Access-Control-Max-Age", "3600"); //设置过期时间
            response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, client_id, uuid, Authorization");
            response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // 支持HTTP 1.1.
            response.setHeader("Pragma", "no-cache"); // 支持HTTP 1.0. response.setHeader("Expires", "0");
            response.setHeader("Access-Control-Allow-Credentials", "true");//允许携带cookie

    我指定成127.0.0.1:8080,如果需要指定多个域名可以按照下列方法,

    通过request获取跨域头,和数组定义好的比较即可

      //当Access-Control-Allow-Credentials为true是 Access-Control-Allow-Origin不能为*
    
            String []  allowDomain= {"http://127.0.0.1:8080","http://localhost:8080"};
            Set<String> allowedOrigins= new HashSet<String>(Arrays.asList(allowDomain));
            String originHeader=((HttpServletRequest)  servletRequest).getHeader("Origin");
            if (allowedOrigins.contains(originHeader)) {
                response.setHeader("Access-Control-Allow-Origin", originHeader); //解决跨域访问报错
                response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
                response.setHeader("Access-Control-Max-Age", "3600"); //设置过期时间
                response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, client_id, uuid, Authorization");
                response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // 支持HTTP 1.1.
                response.setHeader("Pragma", "no-cache"); // 支持HTTP 1.0. response.setHeader("Expires", "0");
                response.setHeader("Access-Control-Allow-Credentials", "true");//允许携带cookie
            }

    2.axiso增加全局配置 ,发送请求时携带cookie

    axios.defaults.withCredentials=true;

    3.再次请求发现http header头已经把cookie携带过去了

    4.另外axios不支持同步请求,我使用原生xhr封装了一个同步请求,以便方便某些业务场景使用

    增加xhr.withCredentials = true;即可携带cookie

    myApp.ajaxSync=function(reqData,scope){
    		   if(myApp.devModel){
    				console.log("ajaxSync begin reqData:"+JSON.stringify(reqData))
    			}
    	       var xhr=new XMLHttpRequest();
               xhr.withCredentials = true;
    	       xhr.open("POST",myApp.getUrl()+"json.request", false);
    	       xhr.setRequestHeader('content-type', 'application/json;charset=UTF-8');
    		   //发送空内容请求
    	       xhr.send(JSON.stringify(reqData));
    	       if(xhr.status===200){
    		    if(myApp.devModel){console.log("ajaxSync end xhr.responseText:"+xhr.responseText)};
    		   	return JSON.parse(xhr.responseText);
    			}
    			console.log("ajaxSync fail xhr.statusText:"+xhr.statusText)
    			return null;
    
    
    }

    展开全文
  • java服务端设置允许跨域请求

    千次阅读 2017-08-29 10:58:51
    java"] //写一个filter对response进行过滤 public class CrossFilter implements Filter{ @Override public void destroy() { // TODO Auto-generated method stub } @Override public ...

    //写一个filter对response进行过滤
    public class CrossFilter implements Filter{

    @Override
    public void destroy() {
    // TODO Auto-generated method stub

    }

    @Override
    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", "POST, GET, OPTIONS, DELETE");
    response.setHeader("Access-Control-Max-Age", "3600");
    response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With,x-requested-with, Content-Type, Accept, client_id, uuid, Authorization");
    // response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
    chain.doFilter(req, res);
    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {

    }

    }
    展开全文
  • java配置允许跨域请求

    万次阅读 2018-12-20 17:21:50
    java配置允许跨域请求 前后端分离的项目,很容易遇到跨域问题。 直接上代码: @WebFilter("/*") public class CORSFilter implements Filter { public CORSFilter() { } public void destroy() { } ...

    java配置允许跨域请求

    前后端分离的项目,很容易遇到跨域问题。

    直接上代码:

    @WebFilter("/*")
    public class CORSFilter implements Filter {
        public CORSFilter() {
        }
    
        public void destroy() {
        }
    
        public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
            //设置跨域请求
            HttpServletRequest request = (HttpServletRequest) req;
            HttpServletResponse response = (HttpServletResponse) res;
            String[] allowDomains = {"http://www域名1",http://www域名2"};
            Set allowOrigins = new HashSet(Arrays.asList(allowDomains));
            String originHeads = request.getHeader("Origin");
            if(allowOrigins.contains(originHeads)){
                response.setHeader("Access-Control-Allow-Origin", originHeads);
                response.setHeader("Access-Control-Allow-Methods", "POST,GET,OPTIONS,DELETE,HEAD,PUT,PATCH");
                response.setHeader("Access-Control-Max-Age", "36000");
                response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept,Authorization,authorization");
                response.setHeader("Access-Control-Allow-Credentials","true");
            }
            chain.doFilter(req, response);
        }
    
        public void init(FilterConfig fConfig) throws ServletException {
        }
    }
    

    说明:

    1. 配置跨域访问的最简单的方式是用通配符 * ,(就是不安全,所有的请求都能跨域),如下代码:
    response.setHeader("Access-Control-Allow-Origin","*");
    

    这种方式不爽的地方就是前端浏览器不能带cookie信息(前端不能用带cookie的请求模式)如下:

    response.setHeader("Access-Control-Allow-Origin","*");
    response.setHeader("Access-Control-Allow-Credentials","true");//保持跨域 Ajax 时的 Cookie
    

    服务器端 Access-Control-Allow-Credentials = true时,参数Access-Control-Allow-Origin 的值不能为 ‘*’ 。否则不起作用

    1. 允许多个域名跨域访问时,根据上面的方式去设置一个数据集合就可以了。
    展开全文
  • java 后端允许跨域

    2020-08-30 03:05:28
    } // 允许跨域的请求方法类型 response.setHeader("Access-Control-Allow-Methods", "*"); // 预检命令(OPTIONS)缓存时间,单位:秒 response.setHeader("Access-Control-Max-Age", "3600"); // 明确许可客户端...
  • 1. 编写自定义过滤器,对于跨域的请求进行过滤,然后设置header使其支持跨域请求 package com.demo.cxf.restful.filter; import java.io.IOException; import java.util.Arrays; import java.util.HashSet; ...
  • *@ClassName: CrossFilter 允许跨域访问 *@Description: TODO *@author:lfp *@date: 2019年7月23日 下午7:08:02 **/ public class CrossFilter implements Filter{ @Override public void destroy() { //...
  • java 允许跨域

    千次阅读 2018-07-12 09:02:50
    就在刚刚,朋友问我跨域怎么解决,正好前段时间刚做过,那我就来分享一下吧。首先创建Httpfilter类,在 Controller 同级下创建Httpfilter类代码:package com.Verification.filter; import java.io.IOException; ...
  • Java设置接口跨域

    2018-11-09 14:24:00
    现在我们很多项目都是基于Java的REST结构风格前后端分离,在前端访问后端的时候就存在跨域,这个时候后端接口不处理就会存在访问不了。上代码!  1、创建一个Filter 在web.xml中配置 <filter> <...
  • //允许跨域访问 response.addHeader("Access-Control-Allow-Origin", "*"); //设置输出的编码为 UTF-8 response.setCharacterEncoding("UTF-8"); //返回给浏览器 response....
  • SpringCloudGetaway设置允许跨域

    千次阅读 2020-06-28 13:47:26
    SpringCloudGetaway跨域 在yml中添加 spring: cloud: gateway: globalcors: corsConfigurations: '[/**]': # 允许携带认证信息 ... # 允许跨域的源(网站域名/ip),设置*为全部 allowedOrigins: "*" .
  • * 设置服务器允许跨域访问 * * @return */ private CorsConfiguration buildConfig() { CorsConfiguration corsConfiguration = new CorsConfiguration(); corsConfiguration.addAllowedOrigin("*"); ...
  • tomcat 设置允许跨域访问

    千次阅读 2020-01-04 20:15:10
    这也是一个统一的允许跨域设置,tomcat下的所有请求都将放开,请注意。 具体步骤: 1.首先找到你的tomcat所在路径,并在conf文件夹下找到 web.xml 2.打开该文件,在以下位置加上这段: <filter> &...
  • Java允许跨域关键代码

    2019-07-11 10:35:08
    允许跨域的关键代码如下,加上3个response的header设置: public Result getSomething(HttpServletResponse response, HttpServletRequest request) { // 允许任意域名访问 response.setHeader("Access-Control-...
  • springboot2.x 设置允许跨域请求 最近使用axios请求的时候出现了跨域请求被拦截的问题,如下图: 找了一些解决方法,总结一下主要有两种解决方法。 1.配置cors配置类,也可以说是cors过滤器,这是设置全局请求都...
  • 前后端分离的项目中会涉及到跨域访问的问题,我这里后端采用的是spring boot框架,可以在过滤器中添加允许跨域设置 //设置允许跨域访问 response.setHeader("Access-Control-Allow-Origin", "*&...
  • springboot设置允许跨域访问配置

    千次阅读 2019-10-25 17:04:45
    //设置允许跨域请求的域名 .allowedOrigins("*") //是否允许证书 不再默认开启 .allowCredentials(true) //设置允许的方法 .allowedMethods("*") //跨域允许时间 .maxAge(3600); } } 还有一种方法 使用...
  • Java设置接口跨域(类配置)

    千次阅读 2019-03-04 09:13:25
    配置类 @Configuration public class CorsConfig { private CorsConfiguration buildConfig() { CorsConfiguration corsConfiguration... // 对接口配置跨域设置 return new CorsFilter(source); } }  
  • response.setHeader("Access-Control-Allow-Origin", "*"); //设置允许任何域名跨域访问 response.setHeader("Access-Control-Allow-Origin", "http://localhost:8080/");//设置指定域访问
  • java web ajax 允许跨域

    千次阅读 2018-03-15 15:35:57
    package ... import java.io.IOException; import java.util.Arrays; import java.util.List; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfi...
  • 就在刚刚,朋友问我跨域怎么解决,正好前段时间刚做过,那我就来分享一下吧。首先创建Httpfilter类,在 Controller 同级下创建1.pngHttpfilter类代码:package com.Verification.filter;import java.io.IOException;...
  • 关于什么是跨域,请参考 https://blog.csdn.net/weixin_43310551/article/details/86304618 。 将一份数据放到了tomact服务器的webapps文件夹下,当成服务调用。如下图所示: 我在前端通过url:...
  • import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework... // 对接口配置跨域设置 return new CorsFilter(source); } }
  • Java允许跨域重载

    2013-03-07 16:34:24
    class Base { void fun(int num) { System.out.println("fun(int num)"+num); } } public class Derived extends Base ... void fun(double num) ... System.out.println("fun(double num)"+num);...
  • spring boot 服务器端设置允许跨域访问

    万次阅读 多人点赞 2016-11-09 17:57:28
    import org.springframework.stereotype.Component; import javax.servlet.*; import javax.servlet.... import java.io.IOException; /** * * 跨域过滤器 * @author meng * @version * ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,022
精华内容 8,808
关键字:

java设置允许跨域

java 订阅