Spring知识体系-基础整理-思维导图(00001),springboot面试题及答案高级

我们还可以研究一下 @CrossOrigin放在类上和方法上都存在时 采用的合并策略和上面的配置类类似:

如果我们直接写 @CrossOrigin 不配置属性,里面有那些属性和默认值

先通过源码看看该注解支持的属性

@Target({ ElementType.METHOD, ElementType.TYPE })

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface CrossOrigin {

String[] DEFAULT_ORIGINS = { “*” };

String[] DEFAULT_ALLOWED_HEADERS = { “*” };

boolean DEFAULT_ALLOW_CREDENTIALS = true;

long DEFAULT_MAX_AGE = 1800;

/**

  • 同origins属性一样

*/

@AliasFor(“origins”)

String[] value() default {};

/**

  • 所有支持域的集合,例如"http://domain1.com"。

  • 这些值都显示在请求头中的Access-Control-Allow-Origin

  • "*"代表所有域的请求都支持

  • 如果没有定义,所有请求的域都支持

  • @see #value

*/

@AliasFor(“value”)

String[] origins() default {};

/**

  • 允许请求头中的header,默认都支持

*/

String[] allowedHeaders() default {};

/**

  • 响应头中允许访问的header,默认为空

*/

String[] exposedHeaders() default {};

/**

  • 请求支持的方法,例如"{RequestMethod.GET, RequestMethod.POST}"}。

  • 默认支持RequestMapping中设置的方法

*/

RequestMethod[] methods() default {};

/**

  • 是否允许cookie随请求发送,使用时必须指定具体的域

*/

String allowCredentials() default “”;

/**

  • 预请求的结果的保存有效期,默认30分钟

*/

long maxAge() default -1;

}

源码部分截图:

如果你对这些属性还是不太理解 推荐阅读:

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS

我们基于百度首页做测试:

准备后端代码 并启动服务:

@RestController

public class TestController {

// 只允许origin是 https://www.baidu.com 的跨域请求

@CrossOrigin(origins = “https://www.baidu.com”)

@GetMapping(“/testCrossOrigin”)

public String testCrossOrigin(){

return “CORS TEST !”;

}

}

打开浏览器测试:

https://www.baidu.com/ 点击后F12 打开console控制台:输入

var xhr = new XMLHttpRequest(); xhr.open(“GET”,“http:localhost:8080/testCrossOrigin”,true); xhr.send();

就是在百度首页下 发起Ajax请求:

后端只有 http://localhost:8080/testCrossOrigin请求配置跨域注解,其他跨域请求都会报错,

下图展示了正确配置 http://localhost:8080/testCrossOrigin的请求结果正常:

这里我们对正常的跨域请求 主要关注请求头和响应头的 Origin  、Access-Control-Allow-Origin 属性特点:属性值相同。

我们不基于百度首页进行测试 发现报错:说明我们的配置只能针对百度首页有效。

总结 :

客户端发起跨域请求CORS 时在请求头设置Origin属性,springmvc接收请求后会根据跨域配置注解的属性判断

是否允许访问以及访问路径模式是否正确**,通过后就会在响应头内设置Access-Control-Allow-Origin 的值取值orgin的值。标识可以正常访问**

拓展:实战问题

spring注解@CrossOrigin不起作用的原因

1、是springMVC的版本要在4.2或以上版本才支持@CrossOrigin

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
img

总结

总体来说,如果你想转行从事程序员的工作,Java开发一定可以作为你的第一选择。但是不管你选择什么编程语言,提升自己的硬件实力才是拿高薪的唯一手段。

如果你以这份学习路线来学习,你会有一个比较系统化的知识网络,也不至于把知识学习得很零散。我个人是完全不建议刚开始就看《Java编程思想》、《Java核心技术》这些书籍,看完你肯定会放弃学习。建议可以看一些视频来学习,当自己能上手再买这些书看又是非常有收获的事了。

…(img-PbAXWeZh-1711085947366)]

总结

总体来说,如果你想转行从事程序员的工作,Java开发一定可以作为你的第一选择。但是不管你选择什么编程语言,提升自己的硬件实力才是拿高薪的唯一手段。

如果你以这份学习路线来学习,你会有一个比较系统化的知识网络,也不至于把知识学习得很零散。我个人是完全不建议刚开始就看《Java编程思想》、《Java核心技术》这些书籍,看完你肯定会放弃学习。建议可以看一些视频来学习,当自己能上手再买这些书看又是非常有收获的事了。

[外链图片转存中…(img-FS65oK8m-1711085947367)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值