都知道分布式是由一个个小模块组装到一起的一种架构,搭建在多台服务器上,
那么问题来了-------》既然是很多个小模块组装的,那我们登录的seesion怎么办?我在服务器1上登录了,其它服务器怎么知道?那么我从功能1--进入功能2,我就不是我了?功能2后续操作是不是就丢了?
解决办法自然也就来了
CAS是Central Authentication Service的缩写,中央认证服务,一种独立开放指令协议。CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法
1、开源的企业级单点登录解决方案。
CAS分为两部分,CAS Server和CAS Client。
CAS Server用来负责用户的认证工作,就像是把第一次登录用户的一个标识
存在这里,以便此用户在其他系统登录时验证其需不需要再次登录。(我的理解:就像是你去旅游区,首先得去,你先到窗口去买票,你去旅游区具体景点的时候凭票据进入,别人就知道你买票了,CAS Server就是售票窗)
CAS Client就是我们自己开发的应用程序,需要接入CAS Server端。当用户
访问我们的应用时,首先需要重定向到CAS Server端进行验证,要是原来登陆过,就免去登录,重定向到下游系统,否则进行用户名密码登陆操作。(我的理解:这里就是旅游区具体景点,游客进来,CAS Client这边就是检查票据的检票员,你没买票,把游客挡住让他去买票,有票的放行让他进景点游玩)
好了咱们动真格的
首先得去下载Cas Server 地址: https://pan.baidu.com/s/1T-qC1vjXkmoMdpPhBismLQ
提取码:9ap0
(那就直接用我的吧,当然也可以自己去https://github.com/apereo/cas/releases/那边下载,自己打成war)
好我这边是打好的war,直接放入tomcat webapp下,启动tomcat就好了,
还需要下载三个包
也可以自己选择数据库,及数据库连接池,这边以c3p0和mysql数据库为例
把这三个包放入war包的WEB-INF\lib下
然后修改配置
WEB-INF下面的deployerConfigContext.xml
找到
修改为
新增
具体修改完成之后为:
memberOf
faculty
staff
org
这样CAS Server服务端就搭建好了,启动tomcat就OK了
当然现在是不允许http协议的
WEB-INF\classes\services把HTTPSandIMAPS-10000001.json改一下
"serviceId" : "^(https|imaps|http)://.*",
带上http就好了
那再来来CAS Client端的实现吧
我这里就直接贴代码了 Spring boot实现
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.1.4.RELEASE
com.example
demo4
0.0.1-SNAPSHOT
demo4
Demo project for Spring Boot
1.8
org.springframework.boot
spring-boot-starter-web
net.unicon.cas
cas-client-autoconfig-support
1.4.0-GA
mysql
mysql-connector-java
runtime
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
cas:
client-host-url: http://127.0.0.1:8084
server-login-url: http://127.0.0.1:9090/cas/login
server-url-prefix: http://127.0.0.1:9090/cas
validation-type: CAS
server:
port: 8084
package com.example.demo.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class IndexController {
@RequestMapping("/login")
public String auth() {
return "login success";
}
}
package com.example.demo;
import net.unicon.cas.client.configuration.EnableCasClient;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@EnableCasClient
@SpringBootApplication
public class Demo4Application {
public static void main(String[] args) {
SpringApplication.run(Demo4Application.class, args);
}
}
启动一下项目就可以来看看效果了
访问 http://127.0.0.1:8084/login
发现要到cas那边去登录
登录成功后返回回来了
有fiddler的你们可以抓一下包,就清楚了