您的当前位置:首页正文

cas5.3统一登录前后端分离改造方案(源码)

2024-11-29 来源:个人技术集锦

cas5.3

为什么选择cas5.3 版本

5.3 版本是最新的支持jdk8 的版本,并且项目架构基于maven ,商业项目中jdk8 仍是主流,在考虑商业收益的情况下,如果客户不要求,不会升级jdk, 基于Maven的项目比gradle 简单,易于掌握。

所以在选择cas版本的时候综合考虑历史情况,和技术现状,选择了5.3.16版本。

为什么要前后端分离

目前主流的系统都是前后端分离,前端可以自由制作页面,不依赖cas的代码,个性化交互。
cas本身设计思想是前后端不分离,依靠cookie 传递登录状态,登录信息。

为什么不用原生的前后端分离

cas自身支持前后端分离,但是返回的数据格式不能自定义,需要前端判断兼容,不够优雅,并且一些账户不存在,密码错误,或者权限信息无法传递给前端,所以需要自己改造cas,自己实现前后端分离。

代码改造点

UsernamePasswordCredential 实现

原生的Credential 传递信息只包含用户名,密码,如果需要其他信息则需要自己实现

验证码

增加验证码生成逻辑,增强登录的安全性

短信验证

流程参考验证码生成验证逻辑

接入Redis

自定义逻辑接入Redis,实现分布式验证码验证

密码错误次数

记录判定密码错误次数

封装返回结果

返回结果用Result 封装,包含状态码,异常信息,便于前后端对接

Maven 配置

配置示例

  <!--Kaptcha是一个基于SimpleCaptcha的验证码开源项目-->
        <dependency>
            <groupId>com.github.penggle</groupId>
            <artifactId>kaptcha</artifactId>
            <version>2.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.apereo.cas</groupId>
            <artifactId>cas-server-core-logout-api</artifactId>
            <version>5.3.16</version>
            <scope>compile</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apereo.cas/cas-server-core-util -->
        <dependency>
            <groupId>org.apereo.cas</groupId>
            <artifactId>cas-server-core-util</artifactId>
            <version>5.3.16</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.apereo.cas</groupId>
            <artifactId>cas-server-support-redis-ticket-registry</artifactId>
            <version>${cas.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apereo.cas</groupId>
            <artifactId>cas-server-support-actions</artifactId>
            <version>${cas.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apereo.cas</groupId>
            <artifactId>cas-server-core</artifactId>
            <version>${cas.version}</version>
        </dependency>

分布式部署(系统鲁棒性)

验证码验证使用Redis,用户密码校验链接数据源,经过NGINX 之后实现分布式统一登录,可以实现滚动发布,登录不停服。

项目开发文档

关注并私信联系,详细文档包含登录流程分析,开发过程中遇到问题,文档不含源码,需要自己理解开发。

怎么获取源码

知识无价,程序有价,本方案历时一个月形成,期间遇到多个坑。如果从0开始,大概5到15个工作日能完成。

如有源码需求,私信咨询。

显示全文