背景
在多服务统一帐号的应用集中,单点登录是必不可少的。CAS就是成熟的单点登录框架之一。Github地址 https://github.com/apereo/cas。现在我们就通过一系列快速简单的构建方式实现一个简单的单点登录系统集。
第一步:快速构建自己的CAS Server
apereo提供了一个基于层结构的框架,可以帮助开发者快速引入cas server的代码,然后实现自由配置或代码覆盖,打包方式也非常简单。Github地址https://github.com/apereo/cas...。
- 下载或者克隆cas-overlay-template项目到本地,用Intellji Idea打开项目,然后添加当前项目为maven项目。执行Maven命令
mvn install
。执行时间较长,需耐心等待。执行结束后,该项目中会出现overlays目录,里面就是cas server的配置文件和class代码。 -
mvn install
执行后会在项目的target目录下生成一个cas.war包,将该war包放在apache tomcat的webapps/
目录下并启动tomcat后,就能通过浏览器访问,访问地址localhost:8080/cas
。 -
修改默认配置的方式:
- 在项目中添加
src/main/java
和src/main/resources
目录,并将src/main/java
设置为代码文件根目录,将src/main/resources
设置为资源文件根目录。例如要修改默认的登录用户名和密码(默认为casuser/Mellon),只需要将overlays目录下的WEB-INF/classes/
目录中的application.properties
文件复制到src/main/resources
中,并修改最后一行配置cas.authn.accept.users=casuser::Mellon
为cas.authn.accept.users=test::demo
即可,让后重新执行mvn install
并重新部署target/cas.war
包即可验证。 - overlays中的
WEB-INF/classes/
目录下的所有文件均可被覆盖,只需要将该目录下的文件复制到src/main/resources
中,然后修改后重新打包部署,即可。
- 在项目中添加
- CAS5.X默认的登录帐号是在
application.properties
中配置的(casuser::Mellon),正式环境下需要通过连接数据库进行校验,添加数据库验证的教程 https://apereo.github.io/2017...。
第二步:客户端集成CAS
集成CAS客户端实际上是为应用添加多个Filter。以SpringBoot的应用为例,可以采用自动注解的方式添加过滤器。这里我们使用了cas-client-autoconfig-support
项目的集成能力,Github地址https://github.com/Unicon/cas...。
-
在SpringBoot应用的Maven配置文件(
pom.xml
)中添加依赖:<dependency> <groupId>net.unicon.cas</groupId> <artifactId>cas-client-autoconfig-support</artifactId> <version>1.5.0-GA</version> </dependency>
-
在应用启动入口类上添加配置
@EnableCasClient
,示例:@SpringBootApplication @EnableCasClient public class MyApplication { .. }
-
在应用的配置文件中(
application.properties
)添加如下配置:cas.server-url-prefix=https://casserver.com/cas # 填CAS服务器的前缀 cas.server-login-url=https://casserver.com/cas/login # 填CAS服务器的登录地址 cas.client-host-url=https://casclient.com # 填客户端的访问前缀
- 访问应用时就会首先跳转到cas服务器的登录地址。
FQA
HTTP服务对接CAS时登录后报未认证授权的服务
解决办法: 服务端开启http,默认只开始https和imaps。参考 http://blog.csdn.net/leftfist...
操作步骤(1): 修改
services\HTTPSandIMAPS-10000001.json
文件"serviceId" : "^(https|imaps)://.*" 改为==> "serviceId" : "^(https|http|imaps)://.*",
操作步骤(2): 在
application.properties
文件中添加:cas.tgc.secure=false cas.serviceRegistry.initFromJson=true #这一点真是太重要了!!!!!!!!
多应用注销时会有一个注销失败
解决办法: 配置客户端的参数:
useSession
为false
,即不开启session持久。参数配置参考https://github.com/apereo/jav...。示例:@EnableCasClient public class Application extends CasClientConfigurerAdapter { public static void main(String[] args) throws Exception { SpringApplication.run(Application.class, args); } @Override public void configureValidationFilter(FilterRegistrationBean validationFilter) { validationFilter.getInitParameters().put("useSession", "false"); } }
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。