夸java_java跨越请求实例

本文详细介绍了Spring中处理跨域问题的三种方式:CORSFilter、@CrossOrigin注解以及通过配置Bean实现。通过示例代码展示了如何配置允许特定域名的请求,并解释了它们的工作原理。同时,文中还包含了一个本地服务器的示例,演示了跨域请求的实现。
摘要由CSDN通过智能技术生成

什么是跨域

当两个域具有相同的协议(如http), 相同的端口(如80),相同的host(如www.google.com),那么我们就可以认为它们是相同的域(协议,域名,端口都必须相同)。

跨域就指着协议,域名,端口不一致,出于安全考虑,跨域的资源之间是无法交互的(例如一般情况跨域的JavaScript无法交互,当然有很多解决跨域的方案)

Spring 提供了三种方式:

CorsFilter 过滤器

 Bean

@CrossOrigin 注解

这三种方式,本质上都是用来配置 CorsConfiguration。

11.1 CorsFilter

首先,依赖 CorsFilter 创建自己的过滤器:

public class MyCorsFilter extendsCorsFilter {publicMyCorsFilter() {super(configurationSource());

}private staticUrlBasedCorsConfigurationSource configurationSource() {

UrlBasedCorsConfigurationSource source= newUrlBasedCorsConfigurationSource();

CorsConfiguration config= newCorsConfiguration();

config.setAllowedOrigins(Collections.singletonList("http://domain.com"));

config.setAllowCredentials(true);

CorsConfiguration config2= newCorsConfiguration();

config2.setAllowedOrigins(Collections.singletonList("http://domain.com"));

config2.setAllowCredentials(true);

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

source.registerCorsConfiguration("/xxx", config2);returnsource;

}

}

然后,将其注册为一个过滤器即可。

11.2 

11.3 @CrossOrigin

//将跨域设置在类上,那么所有的 mapping 都会使用这个策略//如果不加参数,那么将会使用配置中的默认参数

@CrossOriginpublic classCORSController {public String cors(@RequestParam(defaultValue = "callback") String callback, HttpServletResponse response) {//最原始的方式,手动写请求头

response.setHeader("Access-Control-Allow-Origin", "http://192.168.163.1:8081");return callback + "('hello')";

}//将跨域设置在方法上

@RequestMapping("/cors")

@CrossOrigin(origins= {"http://localhost:8080", "http://remotehost:82323"},

methods={RequestMethod.GET, RequestMethod.POST},

allowedHeaders= {"Content-Type", "skfjksdjfk"},

allowCredentials= "true",

maxAge= 1898978)

@RequestMapping("/rrr")public String rrr(@RequestParam(defaultValue = "callback") String callback) {return callback + "('rrr')";

}

}

不使用注解模式:

packagecom.nf147.manage.controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.RestController;importjavax.servlet.http.HttpServletResponse;

@RestControllerpublic classCorsConstroller {

@RequestMapping("/cors")public String cors (@RequestParam(defaultValue = "callback") String callback, HttpServletResponse response) {

//使用Access-Control-Allow-Origin解决跨请求

response.setHeader("Access-Control-Allow-Origin", "http://169.---236.45:8080"); 注意这里要和本地服务器的url一致

return callback + "('hello')";

}

}

请求页面:

发送

fetch(url+ "/cors", {

method:'get',

}).then(resp=>resp.text())

.then(console.log);

}functionfasong232() {

$.ajax({

method:'get',

url: url+ "/cors",

dataType:'jsonp',

jsonpCallback:'hehehe',

jsonp:'xxxxxxxxxxxxxxxxxxxxxxx'}).done((data)=>{

console.log(3333333333333333, data);

}).fail((x, y, z)=>{

console.error(x, y, z);

})

}functionloadScript(src) {

const script= document.createElement('script');

script.src=src;

document.body.appendChild(script);

}functionfason2g() {if (window.confirm('是否发送?')) {

loadScript(`${url}/cors?callback=aaa`);

} else{

loadScript(`${url}/rrr?callback=bbb`);

}

}functionaaa(c) {

alert(c);

}functionbbb(c) {

console.log(c);

}functionfasong2() {if (window.confirm('是否发送?')) {

$.ajax({

method:'get',

url: url

}).done((data)=>{

console.log(data);

}).fail((x, y, z)=>{

console.error(x, y, z);

})

}

}

我这里是用node搭建了一个本地服务器

教程地址:https://www.cnblogs.com/nongzihong/p/10021033.html

108712913b24b75ebf57c26e9e9b508d.png

效果演示:

0a694313ed11a578772b76b2a0e1b9ee.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值