集成单点登录

2023-05-16

随着现在的系统越来越多(OA考勤,学生宿舍管理等等)。在使用中是不是还在为一次一次的登录而烦恼?或者忘了密码而尴尬,现在,有一个好东西来解决这个问题了。那就是单点登录。

单点登录

单点登录(Single Sign On),简称为 SSO,是比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

单点登录的好处

  1. 提高用户的效率。 用户不再被多次登录困扰,也不需要记住多个 ID 和密码。另外,用户忘记密码并求助于支持人员的情况也会减少。

  2. 提高开发人员的效率。 SSO 为开发人员提供了一个通用的身份验证框架。实际上,如果 SSO 机制是独立的,那么开发人员就完全不需要为身份验证操心。他们可以假设,只要对应用程序的请求附带一个用户名,身份验证就已经完成了。

  3. 简化管理。 如果应用程序加入了单点登录协议,管理用户帐号的负担就会减轻。简化的程度取决于应用程序,因为 SSO 只处理身份验证。所以,应用程序可能仍然需要设置用户的属性(比如访问特权)。
    单点登录的缺点

  4. 不利于重构 因为涉及到的系统很多,要重构必须要兼容所有的系统,可能很耗时。

  5. 容易出现安全问题。因为只需要登录一次,所有的授权的应用系统都可以访问,可能导致一些很重要的信息泄露。

cas 官方网址: https://www.apereo.org/projects/cas .
工程代码网址:https://github.com/Jasig/cas
阿里云cas:https://yq.aliyun.com/articles/636281

以上就是关于单点登录的介绍,下面要做的是对接:

举个栗子

看了,上面的材料,各位应该知道,现在要做的对接,就是我们这边登录成功了,和别人系统登录成功之后,效果是一样的。
所有,我们要做的就是给对面一个?service=http://xxx.xx.xx这个是我们重定向到别人的登录之后,返回的数据的URL没有这个,就不知道回来的路。
然后别人的系统在我们登录成功之后,要返回一个ticket和一个targetUrl
ticket是一个地址用来判断我们是不是要去别人的系统登录,targetURL是将我们需要的数据返回给我们。

// 
String targetUrl = CasUtils.getTargetUrl(request);
        if (CasUtils.isLogin(session)) {
            LoginUser loginUser = (LoginUser)session.getAttribute(Constants.LOGIN_USER_KEY);
            response.sendRedirect(targetUrl);
        } else {
            if (CasUtils.hasTicket(request)) {
                LoginUser loginUser = CasUtils.getLoginUser(request);
                if (loginUser.isLogin() && dologin(loginUser, request)) {
                    CasUtils.login(loginUser, session);
                    //从loginUser中拿到工号,然后自己处理登录逻辑
                    //response.sendRedirect(targetUrl);
                } else {

                    // TODO 可选:业务系统可根据实际情况进行处理
                    //response.sendRedirect(CasUtils.getErrorUrl(request));
                }
            } else {
                String loginUrl = CasUtils.getLoginUrl(request);
                response.sendRedirect(loginUrl);
            }
        }
/** 获取TargetUrl */
    public static String getTargetUrl(HttpServletRequest request) {

        String basePath = getBasePath(request);

        // 获取请求中的targetUrl
        String targetUrl = request.getParameter(Constants.TARGET_URL_KEY);

        if (StringUtils.isEmpty(targetUrl)) {
            // 若不存在,则使用默认页面作为targetUrl
            targetUrl = basePath + Constants.DEF_TARGET_URI;
        } else {
            // 判断target是否编码
            if (targetUrl.startsWith(Constants.BASE64_PREFIX)) {
                targetUrl = targetUrl.substring(Constants.BASE64_PREFIX.length());
                targetUrl = Base64Utils.decodeBase64Str(targetUrl);
            }
        }
        return targetUrl;
    }
 /** 判断是否已经登录过 */
    public static boolean isLogin(HttpSession session) {
        Object isLogin = session.getAttribute(Constants.LOGIN_KEY);
        return BooleanUtils.toBoolean(String.valueOf(isLogin));
    }
/** 判断票据是否存在 */
    public static boolean hasTicket(HttpServletRequest request) {
        Object ticket = request.getParameter(Constants.TICKET_KEY);

        System.out.println("ticket = " + ticket);
        return ticket != null
                && !StringUtils.isEmpty(String.valueOf(ticket));
    }

UML 图表

这将产生一个流程图。:

service和ticket
targetUrl和ticket
我的系统
别人的系统

其中,targetUrl: 里面是你要的数据。ticket:返回的是一个票用来免登录的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

集成单点登录 的相关文章

随机推荐

  • 自定义支持 float 的 range 函数

    python range 函数是步进函数 xff0c 可快速优雅地创建一个整数列表 xff0c 一般用在 for 循环中 但是 python 自带的 range 步进函数只支持整数类型 xff0c 不支持浮点数 那么 xff0c 为了支持浮
  • python opencv通过4个坐标,剪裁图片(抠图)

    一 opencv 裁剪说明 效果展示 要裁剪的图片 裁剪出的单词图像 如下 这里程序我是用在paddleOCR里面 通过识别模型将识别出的图根据程序提供的坐标 即四个顶点的值 进行抠图的程序 上面的our和and就是扣的图 并进行了封装 相
  • python使用tkinter编写一个数据显示窗口(实时显示更新的数据)

    以下代码分为python3版本与python2版本 xff0c python3版本主要靠 self main window after 刷新的时间毫秒 需要刷新的函数这里为窗口的清除与插入函数 刷新函数进行 xff0c python2版本则
  • python 手眼标定OpenCV手眼标定(calibrateHandeye())一

    以下代码来源 本篇博客通过该代码 xff0c 附上记录的公式与查找连接 xff0c 方面以后调用能弄懂各个参数的意思 本篇看完看第二篇代码踩坑部分python 手眼标定OpenCV手眼标定 xff08 calibrateHandeye xf
  • ROS+VNC+Docker(docker下的可视化ROS)镜像源分享

    两个都可用 xff0c 推荐第二个毕竟要新一些 xff0c 以下docker环境中安装vscode链接的方法 1 作者 ct2034 截至本博客写的时候 xff0c 最后更新于2020 xff08 亲测感觉不错 xff09 带有完整 ros
  • 使用docker下的硬件使用(一)之双目摄像头

    本篇博客又名 xff1a 物理机 xff08 宿主机win xff09 下虚拟机 xff08 ubuntu xff09 中的docker下硬件 xff08 双目相机 xff09 调用 一 环境介绍 如下图 xff1a 我在windows10
  • AI自主图像生成 之 stable-diffusion(Anaconda+pycharm)本地部署

    无需订阅专栏 AI自主图像生成 之 stable diffusion 运行效果展示 一 介绍与实验效果 文章末尾包含 1 我已打包到百度云的部署验证成功并包含模型权重的代码文件 可直接链接完成python环境配置的anaconda环境下使用
  • AI自主图像生成 之 stable-diffusion—运行效果展示

    stable diffusion用途 xff1a 输入文字描述 xff0c 输出对应图片 The chicken with the hair parted in the middle and the suspenders is playin
  • python画甘特图

    1 使用plotly 安装包下载 span class token keyword import span plotly span class token punctuation span express span class token
  • bat 打开exe文件,并显示进度条

    如下 C camera flow njl CAM exe是你的exe文件路径 180 就是 180 s xff0c 即三分钟显示完毕 chcp span class token number 65001 span span class to
  • 基于opencv的掩膜生成 python

    代码将遍历JPG dir文件夹中的所有jpg文件 xff0c 并对于每一个jpg文件 xff0c 读取同名的JSON文件 xff0c 然后根据JSON文件中记录的标注区域的坐标在JPG图像上绘制掩膜图像 最后 xff0c 将掩膜图像保存到O
  • 用 Python 解数独(Sudoku)

    芬兰数学家因卡拉花费3个月时间设计出的世界上迄今难度最大的数独 数独是 9 横 9 竖共有 81 个格子 xff0c 同时又分为 9 个九宫格 规则很简单 xff1a 每个空格填入 1 9 任意一个数字 xff0c 需要保证每个横排和竖排以
  • alembic 如何使用?

    在之前的数据库操作中 xff0c 我们新增一个字段是不是每次都得删除数据库表 xff0c 然后再重新将新创建的数据库表映射到数据库中 这样操作是不是很蛋疼 xff1f 是吧 xff1f 于是sqlalchemy作者拜尔为了解决这一问题 xf
  • ROS中用opencv库实现物体中心点提取

    老师搞了个很简陋的双目摄像头 xff0c 只能输出两个摄像头的图像 xff0c 所以为了提取定位物体中心坐标 xff0c 还得算个深度距离 先对两个摄像头图像处理一下 xff0c 基于阈值分割 xff0c 然后提取个轮廓 xff0c 计算个
  • linux c语言高级编程-目录操作

    目录操作总共有以下几个函数 xff1a 1 创建目录 int mkdir const char pathname mode t mode 2 删除目录 int rmdir const char pathname 3 查看目录状态 int s
  • BeagleBone Black使用(一):狗板简介

    前言 BeagleBone 与 Arduino 和 Raspberry Pi xff08 树莓派 xff09 可以说是目前应用最广泛的三大嵌入式开源平台 而 BeagleBone 在一定程度上可视为融合了 Arduino 与树莓派的优点 x
  • 慧数汽车大数据分析:车市竞争将由打造爆款向构建“产品矩阵”转型

    在车企只要完成年销量三十万辆的目标时 xff0c 只需认认真真培育出一款爆款车就足够了 xff0c 如哈弗H6 完成年销量50万辆的目标时 xff0c 只需认认真真培育出一两款爆款车就足够了 xff0c 如哈弗H6 43 哈弗H2 但为什么
  • 4.10 Python tuple元组详解

    元组 xff08 tuple xff09 是 Python 中另一个重要的序列结构 xff0c 和列表类似 xff0c 元组也是由一系列按特定顺序排序的元素组成 元组和列表 xff08 list xff09 的不同之处在于 xff1a 列表
  • 使用ROS和RealSense直接获取点云

    点云获取 Realsense获取内参创建ROS工作环境创建ROS工作包package向package中添加cpp代码catkin make编译失败失败1 使用ROS订阅节点 xff08 rgb和depth xff09 ROS包安装升级Rea
  • 集成单点登录

    随着现在的系统越来越多 xff08 OA考勤 xff0c 学生宿舍管理等等 xff09 在使用中是不是还在为一次一次的登录而烦恼 xff1f 或者忘了密码而尴尬 xff0c 现在 xff0c 有一个好东西来解决这个问题了 那就是单点登录 单