叙述
服务管理(Service Management)就是CAS服务管理工具允许CAS服务器管理员声明和配置哪些服务(Service,CAS客户端)可以在哪些方面使用CAS。服务管理工具的核心组件是服务注册表,它存储一个或多个注册服务。
(作者叙述:简单来说,就是控制sso单点登录限制那个客户端使用cas认证中心进行认证)
推荐使用JSON进行服务管理,所以本文只针对JSON服务管理讲解,更多服务像jpa等等请巡查其他资料。
首先添加依赖包:
<dependency> <groupId>org.apereo.cas</groupId> <artifactId>cas-server-support-json-service-registry</artifactId> <version>${cas.version}</version> </dependency>
在resources/services文件夹下面新建web-10000001.json,具体内容如下:
{ "@class" : "org.apereo.cas.services.RegexRegisteredService", "serviceId" : "^(https|imaps|http)://localhost:8090.*", "name" : "web", "id" : 10000001, "evaluationOrder" : 10 }
注意: Json文件名字规则为name-id.json,id必须为Json文件内容Json一致。
Json文件解释:
- @class:必须为org.apereo.cas.services.RegisteredService的实现类,对其他属性进行一个json反射对象,常用的有RegexRegisteredService,匹配策略为id的正则表达式
- serviceId:唯一的服务id
- name: 服务名称,会显示在默认登录页
- id:全局唯一标志
- description:服务描述,会显示在默认登录页
- evaluationOrder: 匹配争取时的执行循序,最好是比1大的数字
因为在CAS服务中,默认是提供了默认的Service配置项,所以如果添加的Json配置没起作用,可以尝试注释掉默认启动Json,在pom.xml文件里面进行配置,如下:
然后在配置文件application.properties下添加配置:
## # Service Registry(服务注册) # # 开启识别Json文件,默认false cas.serviceRegistry.initFromJson=true #自动扫描服务配置,默认开启 #cas.serviceRegistry.watcherEnabled=true #120秒扫描一遍 cas.serviceRegistry.schedule.repeatInterval=120000 #延迟15秒开启 # cas.serviceRegistry.schedule.startDelay=15000 ## # Json配置 cas.serviceRegistry.json.location=classpath:/services
我这块有5个服务
启动服务,我们可以发现注释掉war包下Json初始化后,默认只启动了5个Json,在控制台中我们可以发现启动日志:
如果没有注释话,默认会是加载了7个服务配置。
这里官方准备的客户端Demo是Java版本的,地址为:cas-sample-java-webapp
打开下载好的官方示例包
打开etc-jetty-jetty-ssl.xml文件,修改端口为8090
修改WEB-INF下的web.xml中的地址
底下也根据上面改成相应一样的地址
然后启动访问http://localhost:8090/
顺利的跳到登录页面了,
登录成功,服务可以访问了,如果换成其他客户端地址,会出现未认证授权的服务。
此时就能保证cas认证中心不被别的未知客户端接入了