CAS单点登录(http方式)

CAS单点登录

1、CAS介绍

首先我们来说一下CAS,CAS全称为Central Authentication Service即中央认证服务,是一个企业多语言单点登录的解决方案,并努力去成为一个身份验证和授权需求的综合平台。
CAS是由Yale大学发起的一个企业级的、开源的项目,旨在为Web应用系统提供一种可靠的单点登录解决方法(属于 Web SSO )。
CAS协议至少涉及三方:客户端Web浏览器,请求身份验证的Web应用程序和CAS服务器。
它也可能涉及后端服务,如数据库服务器,它没有自己的HTTP接口,但与Web应用程序进行通信。
github地址:1、https://github.com/apereo/cas

2、原理

在这里插入图片描述

3、java实现方法

3.1、服务器端(http方式)

目前使用最多的的是apereo的cas-overdelay-template模板实现cas服务器端,地址为https://github.com/apereo/cas-overlay-template,其中的版本分为最新版master和6.0.x版本,这两种版本需要jdk11可以使用,并且使用gradle控制;建议使用5.3.x版本,其源码是由spring boot框架编写;4.2.x版本的源码是利用spring mvc编写,使用时可各取所需,本人使用5.3.x版本进行记录。
下载完成之后可直接对其打包,将其放入:(tomcat路径)\webapps下,启动tomcat即可。(若使用IDE测试,可以更改overlay的包)
在此之前需要更改部分配置:
由于CAS默认使用的是基于https协议,需要改善兼容性因此使用http协议
1、到apache-tomcat-9.0.13\webapps\cas\WEB-INF\classes目录的application,properties添加如下的内容

cas.tgc.secure=false
cas.serviceRegistry.initFromJson=true

2、到apache-tomcat-9.0.13\webapps\cas\WEB-INF\classes\services目录下的HTTPSandIMAPS-10000001.json 修改内容如下,即添加http

  "serviceId" : "^(https|http|imaps)://.*",

3、兼容http修改完毕,由于https协议默认使用的端口为8443,我们修改为tomcat的8080端口 到apache-tomcat-9.0.13\webapps\cas\WEB-INF\classes目录的application,properties添加如下的内容

server.port=8080

4、由于使用的静态密码为casuser::Mellon不好记忆, 故而修改密码 到apache-tomcat-9.0.13\webapps\cas\WEB-INF\classes目录的application,properties的最后面修改密码为如下

cas.authn.accept.users=admin::admin//可选配置选项

5、至此,配置完成,浏览器打开项目出现如图,即可成功:
在这里插入图片描述

3.2、服务器端指定数据库

在pom文件中加入以下三个包:

    <!--数据库认证相关 start-->            
    <dependency>
        <groupId>org.apereo.cas</groupId>
        <artifactId>cas-server-support-jdbc</artifactId>
        <version>${cas.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apereo.cas</groupId>
        <artifactId>cas-server-support-jdbc-drivers</artifactId>
        <version>${cas.version}</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>${mysql.driver.version}</version>
    </dependency>
    <!--数据库认证相关 end--> 

在此处加入mysql.driver:

<properties>
        <cas.version>5.3.9</cas.version>
        <springboot.version>1.5.18.RELEASE</springboot.version>
        <!-- app.server could be -jetty, -undertow, -tomcat, or blank if you plan to provide appserver -->
        <app.server>-tomcat</app.server>

        <mainClassName>org.springframework.boot.loader.WarLauncher</mainClassName>
        <isExecutable>false</isExecutable>
        <manifestFileToUse>${project.build.directory}/war/work/org.apereo.cas/cas-server-webapp${app.server}/META-INF/MANIFEST.MF</manifestFileToUse>

        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <mysql.driver.version>5.1.46</mysql.driver.version><!--把我加在这里-->
    </properties>

打开application.properties:
将最后一行cas.authn.accept.users=casuser::Mellon加井号注释掉,再加入以下内容

cas.authn.jdbc.query[0].url=jdbc:mysql://localhost:3306/badmin?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false
cas.authn.jdbc.query[0].user=root
cas.authn.jdbc.query[0].password=211314
cas.authn.jdbc.query[0].sql=select * from sys_user where account=?
cas.authn.jdbc.query[0].fieldPassword=password
cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver

重启Tomcat大功告成。

3.3、客户端(spring boot)

在新建的springboot的pom文件中加入:

        <!-- https://mvnrepository.com/artifact/net.unicon.cas/cas-client-autoconfig-support -->
        <dependency>
            <groupId>net.unicon.cas</groupId>
            <artifactId>cas-client-autoconfig-support</artifactId>
            <version>1.7.0-GA</version>
        </dependency>

在pom.xml做如下配置,配置内容意思很简单,配置内容的原理上面也说到,当访问分布式系统的资源时,会检验有没有ticket,没有ticket的话会跳转到登录界面,登录成功后要跳转回来当前访问的资源。
application .properties添加如下:

cas:
  server-url-prefix: http://localhost:8080/cas
  server-login-url: http://localhost:8080/cas/login
  client-host-url: http://localhost:9100
  validation-type: cas

server:
  port: 9100

主类中加入@EnableCasClient:

@EnableCasClient
@SpringBootApplication
public class CasStarterApplication {

    public static void main(String[] args) {
        SpringApplication.run(CasStarterApplication.class, args);
    }
}

接口测试:

@RestController
public class TestController {

    @GetMapping("/test")
    public String get(){
        return "test success";
    }
}

未授权的服务错误解决方案:
在这里插入图片描述
在服务端application.properties加入:

#开启识别json文件,默认false
cas.serviceRegistry.initFromJson=true

访问localhost:9100/test
跳转到登录界面
参考地址:

https://segmentfault.com/a/1190000013728604?utm_source=tag-newest
MVC版本的客户端:
https://segmentfault.com/a/1190000013844049

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值