美文网首页
CAS5.3服务器搭建及SpringBoot整合CAS解决分布式

CAS5.3服务器搭建及SpringBoot整合CAS解决分布式

作者: 带着二娃去遛弯 | 来源:发表于2019-05-30 13:52 被阅读0次

    单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
    当我们使用SpringCloud搭建分布式系统后,这些子系统是分别部署在不同的服务器中,那么使用传统方式的session是无法解决的,我们需要使用相关的单点登录技术来解决。
    CAS的原理如下


    image.png

    从结构上看,CAS 包含两个部分: CAS Server 和 CAS Client。CAS Server 需要独立部署,主要负责对用户的认证工作;CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server
    SSO单点登录访问流程主要有以下步骤:

    1. 访问服务:SSO客户端发送请求访问应用系统提供的服务资源。
    2. 定向认证:SSO客户端会重定向用户请求到SSO服务器。
    3. 用户认证:用户身份认证。
    4. 发放票据:SSO服务器会产生一个随机的Service Ticket。
    5. 验证票据:SSO服务器验证票据Service Ticket的合法性,验证通过后,允许客户端访问服务。
    6. 传输用户信息:SSO服务器验证票据通过后,传输用户认证结果信息给客户端。

    接下来搭建CAS5.3
    首先到官方的gihub上下载cas,注意最新的master分支使用的需要java11,该分支使用Gradle工程
    由于我使用的是java8,就使用基于5.3版本的,该版本使用Maven工程
    CAS4.x的server是基于Spring的,模版引擎使用的是JSP,
    CAS5.X之后使用的是基于SpringBoot的,模版引擎使用Thymeleaf,Tymeleaf比JSP要优雅多了
    https://github.com/apereo/cas-overlay-template/tree/5.3
    解压后使用maven命令打包
    mvn package
    把target下生成的war包重命名为cas.war放到tomcat下
    启动tomcat
    找到解压的文件

    由于CAS默认使用的是基于https协议,需要改为兼容使用http协议
    到C:\apache-tomcat-8.5.33\webapps\cas\WEB-INF\classes目录的application,properties添加如下的内容

    cas.tgc.secure=false
    cas.serviceRegistry.initFromJson=true
    1
    2
    到C:\apache-tomcat-8.5.33\webapps\cas\WEB-INF\classes\services目录下的HTTPSandIMAPS-10000001.json
    修改内容如下,即添加http

    "serviceId" : "^(https|http|imaps)://.*",
    1
    兼容http修改完毕,由于https协议默认使用的端口为8443,我们修改为tomcat的8080端口
    到C:\apache-tomcat-8.5.33\webapps\cas\WEB-INF\classes目录的application,properties添加如下的内容

    server.port=8080
    1
    由于使用的静态密码为casuser::Mellon不好记忆,
    修改密码
    到C:\apache-tomcat-8.5.33\webapps\cas\WEB-INF\classes目录的application,properties的最后面修改密码为如下

    cas.authn.accept.users=admin::admin
    1
    CAS服务器搭建完毕,重启tomcat
    启动成功

    image

    默认用户名和密码cas\WEB-INF\classes\application.properties

    image

    用户名:casuser 密码:Mellon

    image

    CAS服务端启动成功

    CAS客户端配置(就是自己项目)

    pom.xml依赖

    <dependency>
    <groupId>net.unicon.cas</groupId>
    <artifactId>cas-client-autoconfig-support</artifactId>
    <version>2.1.0-GA</version>
    </dependency>

    application.properties配置文件
    客户端1
    server.port=8088
    cas服务端的地址
    cas.server-url-prefix=http://localhost:8080/cas
    cas服务端的登录地址
    cas.server-login-url=http://localhost:8080/cas/login
    当前服务器的地址(客户端)
    cas.client-host-url=http://localhost:8088
    Ticket校验器使用Cas30ProxyReceivingTicketValidationFilter
    cas.validation-type=CAS3

    每个客户端只要修改当前服务器地址就行了
    如客户端2
    server.port=8090
    cas服务端的地址
    cas.server-url-prefix=http://localhost:8080/cas
    cas服务端的登录地址
    cas.server-login-url=http://localhost:8080/cas/login
    当前服务器的地址(客户端)
    cas.client-host-url=http://localhost:8090
    Ticket校验器使用Cas30ProxyReceivingTicketValidationFilter
    cas.validation-type=CAS3

    配置完成
    没有登陆时http://localhost:8088http://localhost:8090访问都会跳到CAS 登陆页
    只要客户端1登陆了,登陆端2就能直接访问,反之也能访问

    上面是通过CAS默认的用户名和密码进行登录的,实际项目中我们的用户名和密码肯定是从数据库中获取到的
    官方文档https://apereo.github.io/cas/5.3.x/installation/Configuration-Properties.html
    接下来我们就看一下怎么通过获取数据库的用户进行验证
    配置CAS服务端
    G:\google下载\cas-overlay-template-5.3的pox.xml来打开项目
    pom.xml文件加上依赖
    <dependency>
    <groupId>org.apereo.cas</groupId>
    <artifactId>cas-server-support-jdbc-drivers</artifactId>
    <version>5.3.6</version>
    </dependency>
    <dependency>
    <groupId>org.apereo.cas</groupId>
    <artifactId>cas-server-support-jdbc</artifactId>
    <version>5.3.6</version>
    </dependency>
    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.46</version>
    </dependency>
    cmd进入命令 mvn clean package命令的时候会重新生成一个war包
    把war放到tomcat中解压
    cas\WEB-INF\classes目录的application.properties
    首先注释掉默认的用户#cas.authn.accept.users=casuser::Mellon
    添加如下的内容
    cas.authn.jdbc.query[0].url=jdbc:mysql://localhost:3306/cas?useUnicode=true&characterEncoding=utf-8&useSSL=true
    cas.authn.jdbc.query[0].user=root
    cas.authn.jdbc.query[0].password=a1234567
    cas.authn.jdbc.query[0].sql=select * from user where username=?
    cas.authn.jdbc.query[0].fieldPassword=password
    cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver

    代码示例:
    https://github.com/TheWays/cas5.3

    相关文章

      网友评论

          本文标题:CAS5.3服务器搭建及SpringBoot整合CAS解决分布式

          本文链接:https://www.haomeiwen.com/subject/gromtctx.html