Spring的@CrossOrigin注解使用与CrossFilter对象自定义详解

 更新时间:2023年12月04日 09:41:18   作者:制造bug的键盘钢琴师  
这篇文章主要介绍了Spring的@CrossOrigin注解使用与CrossFilter对象自定义详解,跨域,指的是浏览器不能执行其他网站的脚本,它是由浏览器的同源策略造成的,是浏览器施加的安全限制,所谓同源是指,域名,协议,端口均相同,需要的朋友可以参考下

一、跨域概念解析(@CrossOrigin)

跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全限制。

所谓同源是指,域名,协议,端口均相同,不明白没关系,举个栗子:

  • //a.yagnxigua.com/index.html 调用 //a.yagnxigua.com/server.php (非跨域)
  • //www.123.com/index.html 调用 //www.456.com/server.php (主域名不同:123/456,跨域)
  • //a.yagnxigua.com/index.html 调用 //b.yagnxigua.com/server.php (子域名不同:abc/def,跨域)
  • //a.yagnxigua.com:8080/index.html 调用 /a.yagnxigua.com:8081/server.php (端口不同:8080/8081,跨域)
  • //a.yagnxigua.com/index.html 调用 https://a.yagnxigua.com/server.php (协议不同:http/https,跨域)

请注意:localhost和127.0.0.1虽然都指向本机,但也属于跨域,同理域名和域名对应的ip也属于跨域。

浏览器执行javascript脚本时,会检查这个脚本属于哪个页面,如果不是同源页面,就不会被执行。

二、Spring Boot跨域(@CrossOrigin)

当然这里虽然指SpringBoot但是SpringMVC也是一样的,要求在Spring4.2及以上的版本

1、@CrossOrigin使用场景要求

  • jdk1.8+
  • Spring4.2+

2、@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"。
     * <p>这些值都显示在请求头中的Access-Control-Allow-Origin
     * "*"代表所有域的请求都支持
     * <p>如果没有定义,所有请求的域都支持
     * @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;
}

三、@CrossOrigin使用

Spring Boot下的请求处理控制器

package com.example.demo.controller;
import com.example.demo.domain.User;
import com.example.demo.service.IUserFind;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
//实现跨域注解
//origin="*"代表所有域名都可访问
//maxAge飞行前响应的缓存持续时间的最大年龄,简单来说就是Cookie的有效期 单位为秒
//若maxAge是负数,则代表为临时Cookie,不会被持久化,Cookie信息保存在浏览器内存中,浏览器关闭Cookie就消失
@CrossOrigin(origins = "*",maxAge = 3600)
public class UserController {
    @Resource
    private IUserFind userFind;
    @GetMapping("finduser")
    public User finduser(@RequestParam(value="id") Integer id){
      .......
    }
}

到此这篇关于Spring的@CrossOrigin注解使用与CrossFilter对象自定义详解的文章就介绍到这了,更多相关@CrossOrigin注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 手把手带你粗略了解Java--类和对象

    手把手带你粗略了解Java--类和对象

    这篇文章主要给大家介绍了关于java中类和对象的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-08-08
  • Spring Data JPA框架快速入门之自定义Repository接口

    Spring Data JPA框架快速入门之自定义Repository接口

    Spring Data JPA是Spring基于JPA规范的基础上封装的⼀套 JPA 应⽤框架,可使开发者⽤极简的代码即可实现对数据库的访问和操作,本篇我们来了解Spring Data JPA框架的自定义Repository接口
    2022-04-04
  • Spring异常实现统一处理的方法

    Spring异常实现统一处理的方法

    这篇文章主要介绍了Spring异常实现统一处理的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-12-12
  • Java中valueOf和parseInt的区别详解

    Java中valueOf和parseInt的区别详解

    这篇文章主要介绍了Java中valueOf和parseInt的区别详解,在编程中,遇到类型转换,好像会经常用到 parseInt 和 valueOf,当然这里只拿 Integer 类型进行陈述,其他类型也是雷同的,需要的朋友可以参考下
    2024-01-01
  • SpringBoot+WebSocket实现多人在线聊天案例实例

    SpringBoot+WebSocket实现多人在线聊天案例实例

    本文主要介绍了SpringBoot+WebSocket实现多人在线聊天案例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • IDEA报错"Cannot resolve symbol"问题的解决办法

    IDEA报错"Cannot resolve symbol"问题的解决办法

    早上来了,打开idea发现注解等都变红报错can’t resolvesymbol,由于这个错之前也报过,所以记录一下,这篇文章主要给大家介绍了关于IDEA报错"Cannot resolve symbol"问题的解决办法,需要的朋友可以参考下
    2023-11-11
  • java读取枚举类的值转成list和map方式

    java读取枚举类的值转成list和map方式

    这篇文章主要介绍了java读取枚举类的值转成list和map方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Java刷题之最小k个数的思路及具体实现

    Java刷题之最小k个数的思路及具体实现

    这篇文章主要介绍了Java刷题之最小k个数的思路及具体实现,最小K个数是一个经典的top-K问题,可以通过整体排序、建立小根堆或大根堆的方式解决,排序方式时间复杂度较高,适合数据量小的场景,小根堆适合k较小的情况,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-10-10
  • Java1.8中StringJoiner的使用及源码详析

    Java1.8中StringJoiner的使用及源码详析

    在看String类时,看到有使用StringJoiner类,所以顺便看了下StringJoiner类,下面这篇文章主要给大家介绍了关于Java 1.8中StringJoiner的使用及源码分析的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧
    2018-08-08
  • Java 获取指定日期的实现方法总结

    Java 获取指定日期的实现方法总结

    以下是对Java中获取指定日期的实现方法进行了归纳总结,需要的朋友可以参考下
    2013-07-07

最新评论