解决jeecgboot框架下单点登录后,页面刷新后,会自动跳转到单点登录服务的登录页问题

news2024/11/25 10:36:11

1.配置单点服务,可参考官方文档:http://doc.jeecg.com/2044170
在这里插入图片描述
- 打开.env文件,UE_APP_SSO=true即代表开启SSO登录

NODE_ENV=production
VUE_APP_PLATFORM_NAME=Jeecg-Boot 企业级快速开发平台
VUE_APP_SSO=true

- 打开.env.development文件,修改VUE_APP_CAS_BASE_URL,指向需要配置的单点服务地址。

...忽略其他配置 需要修改这个地址指向单点服务端
VUE_APP_CAS_BASE_URL=http://cas.test.com:8443/cas

- 后端boot修改yml配置 prefixUrl配置的地址需与VUE_APP_CAS_BASE_URL配置的一致

cas:
  # 配置CAS服务地址,cas为工程目录,部署到ROOT目录下http://cas.test.com:8443即可
  prefixUrl: http://cas.test.com:8443/cas 

2.配置完成后,可以正常登录,点击其他页面跳转后,再刷新页面,则跳回到了单点登录的登录页,当然,我们不希望出现这样的操作,刷新页面后仍留在原来页。

3.查阅资料,发现每次刷新后,会实例化Vue对象,新实例化的Vue对象,没有存入token值,导致单点登录后token丢失,导致每次刷新后,跳到了单点登录服务的登录页。

4、解决思路,利用sessionStorage,将第一次登录时地址url中的token进行保存,再次刷新页面时候,从sessionStorage获取token值,然后再判断刷新页面。

5.找到src/cas/sso.js文件,这个文件是单点登录服务开启后,会调用的单点登录初始化方法。
在这里插入图片描述
然后对其修改。

  • 1)将第一次登录的url中的token值进行存储,找到validateSt方法,登录成功后,利用sessionStorage,存入token;
    在这里插入图片描述
function validateSt(ticket, service, callback) {
  let params = {
    ticket: ticket,
    service: service
  };
  store.dispatch('ValidateLogin', params).then(res => {
    //this.departConfirm(res)
    //设置全局token
    if (res.success) {
      sessionStorage.setItem('token', ticket);
      loginSuccess(callback);
    } else {
      let service;
      const domainUrl = window._CONFIG['domianURL'];
      if (domainUrl.lastIndexOf("/api") !== -1) {
        service = "https://" + window.location.host + "?access_token=";
      } else {
        if (domainUrl.indexOf("http://") !== -1) {
          service = "http://" + window.location.host + "?access_token=";
        } else {
          service = domainUrl + "/index.html?access_token=";
        }
      }
      let serviceUrl = encodeURIComponent(service);
      window.location.href = window._CONFIG['casPrefixUrl'] + '/managePage/login?redirectUrl=' + serviceUrl;
    }
  }).catch((err) => {
    //that.requestFailed(err);
  });
}
  • 2)找到 init 方法,添加token判断, 下图中第一个token是Vue中存的token,每次刷新页面的话,会初始化,这个token为空,st是第一次访问是url中的token,如果刷新时,url中没token的话,再从seessionStorage中获取,如果存了,则跳到1)中的方法,进行页面验证,就不会跳到登录页面了。
  • 在这里插入图片描述
const init = (callback) => {
  // if(localStorage.getItem('ifCas') === '0') {
  //   console.log("单点登录,初始化函数ifCas*******"+localStorage.getItem('ifCas'));
  //   callback && callback();
  // } else
  if (process.env.VUE_APP_SSO === 'true') {
    let token = Vue.ls.get(accessToken);
    //访问地址中的token值,是从单点登录服务器发送过来的
    let st = getUrlParam("access_token");
    if (st === '') {
      st = sessionStorage.getItem('token')
    }
    console.log("token*****" + token);
    console.log("st*****" + st);

    let service = "http://" + window.location.host + "/";
    const domainUrl = window._CONFIG['domianURL'];
    if (domainUrl.lastIndexOf("/api") !== -1) {
      if (window.location.protocol === "http:") {
        service = "http://" + window.location.host + "?access_token=";
      } else {
        service = domainUrl.substring(0, domainUrl.indexOf('/api')) + "?access_token=";
      }
    } else {
      if (window.location.protocol === "http:") {
        service = "http://" + window.location.host + "?access_token=";
      } else {
        service = domainUrl + "/index.html?access_token=";
      }
    }

    if(sessionStorage.getItem('ifCas') === '0') {
      console.log("单点登录,初始化函数ifCas*******"+localStorage.getItem('ifCas'));
      callback && callback();
    }else

    if (token) {
      loginSuccess(callback);
    } else {
      if (st) {
        validateSt(st, service, callback);
      } else {
        //如果访问路径中含有login,则不用单点登录页面访问
        let url = document.location.toString();
        if(url.includes('/login')) {
          //设置全局ifCas判断是否是单点登录
          sessionStorage.setItem('ifCas','0');
          callback && callback()
        }else
        {
          let serviceUrl = encodeURIComponent(service);
          window.location.href = window._CONFIG['casPrefixUrl'] + '/managePage/login?redirectUrl=' + serviceUrl;
        }
      }
    }
  } else {
    callback && callback()
  }
};

至此,刷新页面的话,就不会跳到首页了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/101002.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

黑*头条_第7章_app端文章搜索(新版)

黑*头条_第7章_app端文章搜索(新版) 文章目录黑*头条_第7章_app端文章搜索(新版)1) 今日内容介绍1.1)App端搜索-效果图1.2)今日内容2) 搭建ElasticSearch环境2.1) 拉取镜像2.2) 创建容器2.3) 配置中文分词器 ik2.4) 使用postman测试3) app端文章搜索3.1) 需求分析3.2) 思路分析…

m基于CNN卷积神经网络的IBDFE单载波频域均衡算法

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 单载波频域均衡(SC-FDE)是解决符号间干扰(ISI)问题的一项重要技术。相比于单载波时域均衡(SC-TDE)技术和正交频分复用(OFDM)技术,SC-FDE技术具有复杂度低、峰均功率比小的优点。但是,SC-FDE技术中…

Android 测试文字编码格式

测试文字编码格式,与设置字符串格式 调用: juniversalchardet-1.0.3.jar app里的Build.gradle implementation files(libs\\juniversalchardet-1.0.3.jar) java调用: import org.mozilla.universalchardet.UniversalDetector;/*** 测试编…

面试:分库分表经典15连问

目录 1. 我们为什么需要分库分表 1.1 为什么要分库 1.2 为什么要分表 2. 什么时候考虑分库分表? 3. 如何选择分表键 4.非分表键如何查询 5. 分表策略如何选择 5.1 range范围 5.2 hash取模 5.3 一致性Hash 6. 如何避免热点问题数据倾斜(热点数…

LaTex教程(二)——LaTeX排版

文章目录1. 中文宏包2. 字符2.1 空格和分段2.2 标点符号2.2.1 引号2.2.2 连字号和破折号2.2.3 省略号3. 文字强调4. 断行断页1. 中文宏包 ctex 宏包和文档类是对CJK 和xeCJK 等宏包的进一步封装。ctex 文档类包括 ctexart /ctexrep / ctexbook,是对LATEX 的三个标准…

第十七届D2大会(II)

一、无极:面向复杂B端项目的低代码平台设计与实践 页面片:自定义的最小低代码开发单元,包括:数据、布局、业务逻辑等低代码编辑器可配合配置分支管理、DevTool等能力,提供更好的工程体验 二、基于H5页面“高差指纹”技…

湿气是怎么来的?身体湿气重什么症状

相信大家在生活中都听说过湿气这个词,尤其是老一辈的人经常会在夏季说晚上湿气重之类的话。其实,从中医的角度来看,湿气更多的是指内脏器官功能失调引起的内生湿邪,主要与脾脏有关。 中医认为,脾胃具有运输水分和湿度的…

Python:python镜像源管理

文章目录常用镜像源配置镜像源(1)pycharm内部配置(2)手动添加镜像源,临时使用(3) 永久配置镜像源,设置默认anaconda小结常用镜像源 清华:https://pypi.tuna.tsinghua.edu.cn/simple…

JAVA中Volatile/Synchronized

线程安全问题的发生: java的线程内存模型中定义了每个线程都有一份自己的共享变量副本(本地内存),里面存放自己私有的数据,其他线程不能直接访问,而一些共享变量则存在主内存中,供所有线程访问…

DBCO-Sulfo-NHS二苯基环辛炔-磺基活性酯1400191-52-7水溶性试剂

DBCO-Sulfo-NHS Ester二苯基环辛炔-磺基活性酯1400191-52-7 名称:二苯基环辛炔-磺基-琥珀酰亚胺酯 英文名称:DBCO-Sulfo-NHS Ester 结构式: CAS:1400191-52-7 外观:固体/粉末 分子式:C25H21N2NaO8S 分子量&#x…

【图像压缩】JEPG图像压缩【含Matlab源码 1167期】

⛄一、DCT图像无损压缩简介 1 图像压缩 图像压缩按照压缩过程中是否有信息的损失以及解压后与原始图像是否有误差可以分为无损压缩和有损压缩两大类。无损压缩是指不损失图像质量的压缩,它是对文件的存储方式进行优化,采用某种算法表示重复的数据信息&a…

免费l2接口有什么特点?

作为增值行情,免费l2接口行情特点如下: 1、更丰富的信息 更多的盘口订单数据、逐笔成交数据、成交与订单关联数据及增值数据,揭示交易细节,全方位反映市场状态。 2、更丰富的委托盘口 提供买卖方10个价位的价格、股数和委托笔…

DCN神州数码——设备基本指令 (超详细)

神州数码——设备基本操作 Telnet telnet-server enable username DCN privilege 15 password DCN authentication securityip ip authorization line vty command <1-15> {local | radius | tacacs} SSH ssh-server enable username DCN privilege 15 password DCN …

2022沙丘大会 · 信创专场 GBASE告诉您金融行业数据库如何选型

12月10日&#xff0c;2022沙丘大会信创专场如期召开&#xff0c;本期专场由沙丘社区与中国信通院数据库应用创新实验室联合主办&#xff0c;GBASE南大通用技术总监冯文忠受邀出席并分享《国产数据库金融行业应用情况》主题演讲。 数据库作为金融信息系统的关键环节&#xff0…

产品更新-镭速Raysync v6.5.8.0版本发布

镭速版本在近期发布了v6.5.8.0版本&#xff0c;下面我们一起来看下做了哪些更新。 功能一、支持敏感词检测 互联网时代的发展&#xff0c;用户不断产生海量信息&#xff0c;从而也导致了垃圾信息增加&#xff0c;如政治敏感词、违禁词、垃圾广告、色情、血腥暴力等不良信息&am…

AI的进化方向,正在被改写

文|智能相对论 作者|沈浪 人工智能产业的创新焦点已经发生了转移&#xff0c;过去大多谈的是应用创新&#xff0c;如今一场面向底层的技术普惠创新正在持续推进&#xff0c;成为新华三等头部AI厂商相互角力的关键。 日前&#xff0c;新华三刚刚召开一场主题为“进化智能算赋…

【DELM回归预测】基于matlab海鸥算法改进深度学习极限学习机SOA-DELM数据回归预测【含Matlab源码 1977期】

⛄一、PSO-DELM简介 1 DELM的原理 在2004年&#xff0c;极限学习机&#xff08;extreme learning machine,ELM&#xff09;理论被南洋理工大学的黄广斌教授提出&#xff0c;ELM是一种单隐含层前馈神经网络&#xff08;single-hidden layer feedforward neural network,SLFN&am…

精华推荐 |【开发百宝箱之猿如意使用指南】「工欲成其事,必先利其器」一文教你如何通过“猿如意” 优化工作、生活和学习!

开发百宝箱之猿如意使用指南【欢迎您】使用“猿如意”百宝箱大家科普一下什么是猿如意&#xff1f;赶快趁热下载个【猿如意】吧【猿如意】使用体验打分和评估【猿如意】整体功能评分【猿如意】UI效果评分【猿如意】易用性效果【猿如意】各组件评分每个程序猿值得拥有的学习开发…

python清空字典的两种方法

python清空字典的两种方法比较 这里说的clear是指清空python中的字典内容&#xff0c;与删除该字典不一样。 例如&#xff1a; d{‘name’:1,‘age’:2} 想要清空该字典有两个方法 方法1&#xff1a; d.clear() 打印出d 的值为&#xff5b;&#xff5d; 方法2&#xff…

java 10--- static

static 修饰成员变量: 实例成员变量必须要new一个对象&#xff0c;静态成员变量可以不new对象 静态成员变量例子&#xff1a; static修饰成员变量内存图&#xff1a; static修饰成员方法&#xff1a; ​​​​​​​ 修饰成员方法内存图&#xff1a; 注意事项&#xff1a…