您现在的位置是:首页 > 正文

前后端分离单点登录

2024-04-01 03:55:38阅读 5

单点登录基于 Apereo CAS实现,不是此次记录的重点。

登陆过程中,需要重定向至CAS Server,前端Vue+axios,需要从单页面跳转至login页面,后端如果使用response.sendRedirect(),返回302,axios并不能拦截到302,浏览器会自动跳转,就会出问题。

解决:

后端判断请求是否是axios(Ajax)请求,如果是,不返回302,约定一个返回码,我用的是401,前端axios在response中拦截到401错误,由前端利用window.location=xxx进行跳转。

踩坑:

如何判断Ajax请求,网上搜索得知,判断reques.getHeader("X-Requested-With"),如果是XMLHttpRequest,那么就是Ajax请求。但是不知道是什么问题,请求中并没有“X-Requested-With”这个请求头,遂在axios的config中设置了headers如下:

  headers: {
    'X-Requested-With': 'XMLHttpRequest'
  }

就又踩一坑,由于自定义了请求头,请求变成了复杂请求,浏览器会先发一个预检请求(OPTIONS方法),通过预检之后才会发真正的请求(GET,POST等),因此后端要处理预检请求:

if (request.getMethod().equals("OPTIONS")) {
//处理预检请求
response.setStatus(HttpStatus.SC_NO_CONTENT);
response.addHeader("Access-Control-Max-Age", "86400");
response.setHeader("Access-Control-Allow-Methods", "*");
response.setHeader("Access-Control-Allow-Headers","x-requested-with");
response.setHeader("Access-Control-Allow-Origin", “xxx”);
response.setHeader("Access-Control-Allow-Credentials", "true");
} else {
//处理真正的请求
}

在处理真正的请求时,就要按照解决办法来操作。

 

网站文章

  • Harbor仓库的管理

    Harbor仓库的管理

    2024-04-01 03:54:58
  • APT(Advanced Persistent Threat高级持续性威胁)——网络安全

    APT(Advanced Persistent Threat高级持续性威胁)——网络安全

    网络安全APT(Advanced Persistent Threat高级持续性威胁)是一种复杂的网络攻击,旨在长期潜伏在目标网络中,有组织的黑客或攻击者利用高级技术手段对目标系统进行持续的渗透和监视,以获取敏感信息、窃取数据或进行其他恶意攻击活动。下面是一些关于网络安全有关APT的介绍:

    2024-04-01 03:54:52
  • Lucene .NET 全文检索

    Lucene .NET 全文检索

    近期做项目中有用到过Lucene,那个模块是由一位前端大神负责的,空闲时间我也做了个关于Lucene做全文检索的Demo,记录下来,方便以后学习。 关于Lucene的原理,网上有长篇大论的文章,有兴趣的话可以去阅读,再次我就直奔主题,在代码中分析其原理。 1、创建索引(此处我用的是盘古分词) 注:在后台代码的第一行上加上 #definenotes这样一行代码,目的是可以用外侧代码的#if,

    2024-04-01 03:54:44
  • mysql捕获 分析和优化sql

    mysql捕获 分析和优化sql

    2024-04-01 03:54:02
  • 基于PO和单例设计模式用python+selenium进行ui自动化框架设计【多测师_王sir】

    基于PO和单例设计模式用python+selenium进行ui自动化框架设计【多测师_王sir】

    一)框架目录的结构二)config包当中的config.ini文件主要是用来存项目的绝对路径,是为了后续跑用例和生成测试报告做准备然后目前的配置文件大都会用yaml,ini,excel,还有.py也就是python文件来进行管理这里用的是ini文件。三)config包当中的globalconfig文件主要是用来生成项目的路径,测试用例,测试报告的路径其中调用了ReadConfigIni这...

    2024-04-01 03:53:56
  • 将字节转换成十六进制字符串

    /* * 将字节数组转换为十六进制字符串 * * @param byteArray * @return */ private static String byteToStr(byte[] byteArray) { String strDigest = ""; for (int i = 0

    2024-04-01 03:53:49
  • 信息学奥赛一本通题库 1007 计算(a+b)×c的值

    计算(a+b)×c的值

    2024-04-01 03:53:42
  • BZOJ 1025 [SCOI2009]游戏 - 筛法+DP

    一眼就能看出来这道题的规律,找循环节的lcm,然后。。。然后就不会了。。。 这道题已经转化为了:求一堆和比n小的数,且构成的不同lcm的个数lcm(a1,...,an)=px11⋅px22⋅...⋅pxnn其中∑i=1nai<=nlcm(a_1,...,a_n)=p_1^{x_1}·p_2^{x_2}·...·p_n^{x_n}其中\sum_{i=1}^{n}a_i<=n 题意中求的是lcm的可

    2024-04-01 03:53:02
  • 关于IDEA运行多个Service时启动类显示为灰色的问题解决方案

    关于IDEA运行多个Service时启动类显示为灰色的问题解决方案

    网上一搜一大把的复制粘贴过来的一模一样的东西,完全是浪费时间。把调试限制的配置改成20就好了。人idea设置就摆在那,如图。上图不可取,太麻烦了,自己沉下心研究了一下。

    2024-04-01 03:52:57
  • Hadoop学习笔记-MapReduce实现好友推荐记录

    Hadoop学习笔记-MapReduce实现好友推荐记录

    一、简介好友推荐功能简单的说是这样一个需求,预测某两个人是否认识,并推荐为好友。二、思路某两个非好友的用户,他们的共同好友越多,那么他们越可能认识。比如,原始数据如下Tom Cat Hello Had...

    2024-04-01 03:52:50