Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 1217|回复: 0

Maven Web项目解决跨域问题

[复制链接]
  • TA的每日心情
    奋斗
    半小时前
  • 签到天数: 742 天

    [LV.9]以坛为家II

    2037

    主题

    2095

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    703644
    发表于 2021-10-7 10:32:55 | 显示全部楼层 |阅读模式

    跨域问题目前笔者所用到的方案大致有三种:jsonp,SpringMVC 4以上注解方式和cros三方过滤器。

    Jsonp

    JSONP(JSON with Padding)是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式)。

    Jsonp原理: 
    首先在客户端注册一个callback, 然后把callback的名字传给服务器。

    此时,服务器先生成 json 数据。 
    然后以 javascript 语法的方式,生成一个function , function 名字就是传递上来的参数 jsonp.

    最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端。

    客户端浏览器,解析script标签,并执行返回的 javascript 文档,此时数据作为参数,传入到了客户端预先定义好的 callback 函数里.(动态执行回调函数)

    使用JSON的优点在于: 
    比XML轻了很多,没有那么多冗余的东西。 
    JSON也是具有很好的可读性的,但是通常返回的都是压缩过后的。不像XML这样的浏览器可以直接显示,浏览器对于JSON的格式化的显示就需要借助一些插件了。 
    在JavaScript中处理JSON很简单。 
    其他语言例如PHP对于JSON的支持也不错。

    JSON也有一些劣势: 
    JSON在服务端语言的支持不像XML那么广泛,不过JSON.org上提供很多语言的库。 
    如果你使用eval()来解析的话,会容易出现安全问题。 
    只支持GET方式的请求方式不支持POST,导致如果是非常复杂的参数传递会造成参数丢失,因为GET方式只能在URL后面拼接参数,而且限制只能是: 
    在IE8 下的URL地址总长度为:4076,超过该长度会自动忽略后面的内容; 
    在firefox 25下的URL地址总长度可以达到:7530,超过该长度会访问错误;

    在chrome 29.0.1547.62 的最大总长度达到:7675,超过该长度会访问错误;

     

    2. 使用Cros三方方式(我用这种)

    (1)pom.xml添加依赖

    <!-- 跨域支持-->  
            <dependency>  
                <groupId>com.thetransactioncompany</groupId>  
                <artifactId>cors-filter</artifactId>  
                <version>2.5</version>  
            </dependency> 

    (2)web.xml添加三方过滤器

    <!--  提供跨域支持 -->
        <filter>    
            <filter-name>CORS</filter-name>    
            <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>    
            <init-param>    
                <param-name>cors.allowOrigin</param-name>   
                <param-value>*</param-value>   
            </init-param>    
            <init-param>    
                <param-name>cors.supportedMethods</param-name>   
                <param-value>GET, POST, HEAD, PUT, DELETE</param-value>   
            </init-param>    
            <init-param>    
                <param-name>cors.supportedHeaders</param-name>   
                <param-value>Accept, Origin, X-Requested-With, Content-Type, Last-Modified</param-value>   
            </init-param>    
            <init-param>    
                <param-name>cors.exposedHeaders</param-name>   
                <param-value>Set-Cookie</param-value>   
            </init-param>    
            <init-param>    
                <param-name>cors.supportsCredentials</param-name>   
                <param-value>true</param-value>   
            </init-param>    
        </filter>    
        <filter-mapping>    
            <filter-name>CORS</filter-name>    
            <url-pattern>/*</url-pattern>    
       </filter-mapping> 

    参数讲解

    cors.allowOrigin指的可以通过的ip,代表所有,可以使用指定的ip,多个的话可以用逗号分隔,默认为 
    cors.supportedMethods指的是请求方式 默认为* 
    cors.supportedHeaders请求支持的头信息,默认为* 
    cors.exposedHeaders暴露的头信息,默认的empy list 
    cors.supportsCredentials支持证书,默认为true 
    cors.maxAge 最大过期时间,默认为-1 
    cors.tagRequests 默认为false 
    cors.allowSubdomains允许子域 默认为false

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-3-19 13:23 , Processed in 0.062616 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表