Hi,欢迎来到华清远见Java培训/Java软件开发培训/Java工程师培训官网!
  • Java培训400客服 400-611-6270
  • Java培训中心官方微信二维码
  • Java培训官方微博
  • Java培训官方QQ群
您当前的位置:移动互联网学院 > Java培训 > JAVA开发 > Java实现跨域请求解决方法

Java实现跨域请求解决方法

时间:2017-07-19 16:50 来源:华清远见Java培训中心

Java如何实现跨域请求呢?相信大家在写前端脚本的时候经常会遇到发送数据到后台的情况,但是由于浏览器的限制,不同域名之间的数据是不能互相访问的,那前端怎么和后端如何进行数据之间的交换呢?今天就和大家分享一下Java后台实现跨域请求的解决方法。

一、定义一个类继承Filter

package com.zdnst.common.infra.filter.corsFilter;

import javax.servlet.*;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

/**

* Created by yongqin.zhong

* Date 7/14/2017.3:27 PM

*/

public class SimpleCORSFilter implements Filter {

@Override

public void destroy() {

}

@Override

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) throws IOException, ServletException {

HttpServletRequest httpRequest = (HttpServletRequest) request;

HttpServletResponse httpResponse = (HttpServletResponse) response;

// 跨域

String origin = httpRequest.getHeader("Origin");

if (origin == null) {

httpResponse.setHeader("Access-Control-Allow-Origin", "*");

} else {

httpResponse.setHeader("Access-Control-Allow-Origin", origin);

}

httpResponse.setHeader("Access-Control-Allow-Headers", "Origin, x-requested-with, Content-Type, Accept,X-Cookie");

httpResponse.setHeader("Access-Control-Allow-Credentials", "true");

httpResponse.setHeader("Access-Control-Allow-Methods", "GET,POST,PUT,OPTIONS,DELETE");

if ( httpRequest.getMethod().equals("OPTIONS") ) {

httpResponse.setStatus(HttpServletResponse.SC_OK);

return;

}

chain.doFilter(request, response);

}

@Override

public void init(FilterConfig arg0) throws ServletException {

}}

二、在web.xml的filter最顶部位置增加以下配置

<filter>

<filter-name>cors</filter-name>

<filter-class>com.zdnst.common.infra.filter.corsFilter.SimpleCORSFilter</filter-class>

</filter>

<filter-mapping>

 

<filter-name>cors</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

即可;

总结:在java后台增加了这样head头配置后,页面请求会自动重复调用两次接口,一次是预调用;“OPTIONS”状态的;

nginx跨域设置

nginx跨域问题

例子:访问http://10.0.0.10/ 需要能实现跨域

操作:

http://10.0.0.10/项目是部署在tomcat里面,tomcat跨域暂时还不会,按照网上的方法操作也没成功

只有用Nginx做个代理,解决跨域问题了!

1、将www.tangxiaoyue.com域名指向http://10.0.0.11/。只有在域名上设置才能实现跨域。(10.0.0.11是Nginx的IP)

2、在nginx上的配置文件tang.conf进行设置

配置文件例如:

server {

listen 80;

server_name tangxiaoyue.com;

if ( $http_user_agent = "Mozilla/5.0"){

return 403;

}

location / {

add_header 'Access-Control-Allow-Origin' '*';

add_header 'Access-Control-Allow-Credentials' 'true';

add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';

add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';

proxy_pass http://10.0.0.10/;

proxy_set_header Host "tangxiaoyue";

}}

  • 北京

    010-82600385/6

    北京市海淀区西三旗悦秀路北京明园大学校内

  • 上海

    021-54485127

    上海市徐汇区漕溪路250号银海大楼11层

  • 深圳

    0755-25590506

    深圳市龙华新区人民北路美丽AAA大厦15层

  • 成都

    028-85405115

    成都武侯区科华北路99号科华大厦2层

  • 南京

    025-86551900

    南京市白下区汉中路185号鸿运大厦11层

  • 武汉

    027-87804688

    武汉工程大学卓刀泉校区科技孵化器大楼11层

  • 西安

    029-88756251

    西安市高新区高新1路12号天公大厦3层

  • 广州

    18664882007

    广州市天河软件园柯木塱园5栋三层

  • 沈阳

    024-24349000

    沈阳市沈河区北顺城路137号锦峰大厦7层

  • 济南

    0531-88898293

    济南市高新区舜华路三庆世纪财富中心B3座6层

  • 重庆

    023-68064704

    重庆市九龙坡区渝州路87号双薪时代九楼

  • 长沙

    15010390966

    长沙市开福区芙蓉中路海东青大厦B座11楼

Copyright 2004-2017 华清远见教育集团 版权所有,沪ICP备10038863号-3,京公海网安备110108001117号

华清远见,一家专业从事Java开发培训、Java软件培训,Java程序员培训、Java就业培训Java培训机构
网站地图