通过过滤器实现前后端分离的跨域问题

通过过滤器实现前后端分离的跨域问题

跨域指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。在做前后端分离项目的时候就需要解决此问题。

创建过滤器解决跨域问题

(就是前后端在不同服务器上运行)注意:局部和全局只能选择一种!!!
本文只讲述了解决跨域问题的方法,不提供源码讲解。

开启跨域配置

如果使用了springsecurity则需要在securityconfig中添加 .cors()

全局开启:

SecurityConfig:(随便一个config都行,这里就先放在securityconfig里)

@Bean
public CorsFilter corsFilter() {
    //创建CorsConfiguration对象后添加配置
    CorsConfiguration config = new CorsConfiguration();
    //设置放行哪些原始域,这里直接设置为所有
    config.addAllowedOriginPattern("*");
    //你可以单独设置放行哪些原始域 config.addAllowedOrigin("http://localhost:2222");
    //放行哪些原始请求头部信息
    config.addAllowedHeader("*");
    //放行哪些请求方式,*代表所有
    config.addAllowedMethod("*");
    //是否允许发送Cookie,必须要开启,因为我们的JSESSIONID需要在Cookie中携带
    config.setAllowCredentials(true);
    //映射路径
    UrlBasedCorsConfigurationSource corsConfigurationSource = new UrlBasedCorsConfigurationSource();
    corsConfigurationSource.registerCorsConfiguration("/**", config);
    //返回CorsFilter
    return new CorsFilter(corsConfigurationSource);
}

局部开启:在controller类上加注解 @CrossOrigin( 可以详细看注解里面的设置

@CrossOrigin
@RestController
@RequestMapping("/api/user")
public class AccountApiController {

}

设置前端发送的请求携带cookie

如果是自己写的前端需要在发送每个请求的时候带cookie信息(自定义请求,开启get、post请求时带cookie)

function get(url,data, success){
    $.ajax({
        type: "get",
        url: url,
        data:data,
        async: true,
        dataType: 'json',
        xhrFields: {
            withCredentials: true   //开启携带cookie信息,用于security识别用户是否登录
        },
        success: success
    });
}

function post(url, data, success){
    $.ajax({
        type: "post",
        url: url,
        async: true,
        data: data,
        dataType: 'json',
        xhrFields: {
            withCredentials: true
        },
        success: success
    });
}

//举例:
function initUserInfo() {
    get('http://localhost:8080/api/user/info', {},function (data) {     //这里要加{},告诉data是空,否则会吧后面的当作data
        if (data.code === 200) {
            alert("登录成功,欢迎" + data.data.username + "进入图书管理系统!")

        } else {
            alert(data.reason)
            window.location = "http://localhost:8080/login.html"
        }
    })
}

本文来自博客园,作者:不吃紫菜,遵循CC 4.0 BY-SA版权协议,

转载请附上原文出处链接:https://www.cnblogs.com/buchizicai/p/16517381.html及本声明;

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

Original: https://www.cnblogs.com/buchizicai/p/16517381.html
Author: 不吃紫菜
Title: 通过过滤器实现前后端分离的跨域问题

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/578702/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • linux 添加java环境

    将下载的jdk解压到/usr/local/下 设置软链接 在/etc/profile.d/java.sh 添加如下内容(建议在/etc/profile.d/添加环境变量) 生效配置…

    Linux 2023年6月8日
    071
  • Redis主从复制、哨兵、Cluster三种模式

    Redis作为缓存的高效中间件,在我们日常的开发中被频繁的使用,今天就来说一说Redis的四种模式,分别是 「单机版、主从复制、哨兵、以及集群模式」。 可能,在一般公司的程序员使用…

    Linux 2023年5月28日
    0108
  • web安全之反向代理配置X-Frame-Options实现防盗链和防止点击劫持攻击

    介绍 http响应头安全策略,从http头文件的方面,利用参数设置开启浏览器的安全策略,来实现相关的安全机制 X-Frame-Options HTTP响&am…

    Linux 2023年6月6日
    0130
  • nand

    nand flash裸机编程第001节_NAND_FLASH操作原理第002节_NandFlash时序及初始化第003节_NandFlash的芯片id读取第004节_NandFla…

    Linux 2023年6月13日
    083
  • 如何获取 Docker 容器的 IP 地址

    查询单个容器 IP 地址: 使用下面命令可以查看容器详细信息,里面包含 IP 地址信息: docker inspect <container id> </cont…

    Linux 2023年6月7日
    0105
  • Linux 配置Java环境变量

    前言:请各大网友尊重本人原创知识分享,谨记本人博客: 南国以南i 注:目前在官网下载的时候需要登陆,这边分享一个账号,方便下载 账号:2696671285@qq.com密码:Ora…

    Linux 2023年6月14日
    093
  • jquery ui实现文字下拉联想

    效果图:输入”伤寒”两个字,会自动联想下拉展示带有”伤寒”两个字的内容 前端用的是jquery ui做展示,后端数据接口是json数…

    Linux 2023年6月7日
    090
  • Python 定义类时候加括号和不加括号的区别

    新式类与经典类 只有python2.x 中有新式类和经典类的说法,而python3.x 没有,因为其默认都是新式类 python2.x 中默认都是经典类,只有显式的继承了objec…

    Linux 2023年6月7日
    082
  • 附025.kubeadm部署Kubernetes更新证书

    一 查看证书 提示:由上可知,根证书有效期为10年,其他所有证书有效期为1年。 二 证书类别 由此集群根证书签发的证书有: 提示:kubelet的/var/lib/kubelet/…

    Linux 2023年6月13日
    0127
  • python语法01

    在某.py文件中调用其他.py文件中的内容。全局变量的使用。线程的使用。if name == ‘ main‘: 的作用新建两个python脚本文件f1Fil…

    Linux 2023年6月14日
    091
  • Windows Terminal 配置oh-my-posh主题 记录

    reference https://cloud.tencent.com/developer/article/1538644https://cloud.tencent.com/dev…

    Linux 2023年6月6日
    0129
  • 如何写好倒计时

    引言 本文讲解倒计时为什么建议使用 setTimeout而不使用 setInterval,倒计时为什么存在误差,以及如何解决。 倒计时器 在前端开发中,倒计时器功能比较常见,比如活…

    Linux 2023年6月7日
    0340
  • 2022年5月16号开始整理habse

    关于本次整理的hbase内容是基于原理的学习的笔记 Original: https://www.cnblogs.com/yxb123/p/16277454.htmlAuthor: …

    Linux 2023年6月7日
    0123
  • Git简介

    Git是一个开源的分布式版本控制系统,是目前主流的版本控制系统,很多软件项目都会用它做源代码管理。Git的常用操作想必很多人都会,但是可能了解Git内部原理的人并不多。了解一些底层…

    Linux 2023年6月6日
    084
  • Linux下如何修复陈旧的第三方微信版本electronic-wechat

    因为现在的Linux发行版软件库太新的缘故,导致陈旧的electronic-wechat的文本引擎库不能正确运行,一般表现为harfbuzz too old等错误。 即使你把har…

    Linux 2023年6月14日
    0117
  • Apache Shiro 身份验证绕过漏洞 (CVE-2020-1957)

    一、漏洞描述 Apache Shiro 是一个功能强大且易于使用的 Java 安全框架,它执行身份验证、授权、加密和会话管理。 在具有 Spring 动态控制器的 1.5.2 之前…

    Linux 2023年6月13日
    0136
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球