情景描述
- 我们使用cas作为单点登录工具保护所有app
- 但是cas的界面都是默认的,如何修改cas的登录登出以及登录登出成功或者失败的界面样式呢?
矛盾点
使用cas系统,cas的服务器中已经默认配置好了服务器过程中所需的静态资源。这固然好,但是造成了想要修改就变得困难起来。如何修改cas的静态文件成了焦点问题。
cas是什么东西,系统中如何集成cas?
-
sso:单点登录
- 作用:用户只需要登录一次就可以访问多个相互关联的应用。
- example:okta。只需要登录一次,就可以不输入密码的登录任何收录在okta中的app
- anthor example:不同于onePassword或者lastPass,他们是将不同app的密码存在数据库中,登录哪个app,拿出哪个app的密码,这样只要我们记下一个登录onePassword密码即可。
-
cas:是一个单点登录的框架(或者库),针对web实现单点登录。以下是系统中整合cas利用cas功能。
- cas客户端:和系统中的gateway整合在一个服务器。和Spring Security整合在一起使用。
- 客户端原理: 所有请求发往gateway,spring Security具有对请求进行过滤的功能,因此,可以对请求根据url、head或者其他筛选。满足条件的请求可以发往对应的app。但是不满足的请求(比如没有登录没有sT,TGT)被重定向到cas的服务器。
- cas服务器:单独的一个服务器,专门用来做用户身份认证(类似于一个专门的登录登出服务器)
- 服务器原理:当请求发来服务器,验证完身份,保证用户身份没问题,服务器产生sT(类似于session存放在服务器作为身份验证)。给请求带上TGT类似于一种登录成功凭证。然后跳转到对应的app。
- 具体的过程参见链接
- cas客户端:和系统中的gateway整合在一个服务器。和Spring Security整合在一起使用。
cas的服务端是如何做成的?
- 查看网上说法就类似于下载一个app,下载一个压缩包,解压后启动在某个端口,cas的服务器就启动了。
cas html页面在哪里呢?
- 首先我们知道了cas的服务器端
- 因此不论静态文件还是功能都是由cas的服务器提供的。
- 所以如果要修改静态必然是到cas的服务器然后找到resource文件夹修改。
- 然而resource文件夹中并没有我想要修改的html页面
- 因此可以确定,很多HTML页面都是默认存放在cad服务器中,如何想要修改必须创建同名html文件覆盖他
那么如何修改想要修改的页面呢?
- 首先你需要访问github找到你要修改的html文件的名字。
- 我认为可以通过页面找到标签的类名,然后去仓库中search类名
- 然后找到其中包含这个类名的文件,对比找到。
- 然后在本地的cas服务器中创建同名html文件,就可以随意创建修改啦。
cas中html的写法好神奇
- 所有标签都是通过
th:**="#{**}"
来设置属性的。- ex:
<h2 th:utext="#{screen.logout.header}"/>
说明h2的utext(也就是内容)是变量#{screen.logout.header}
-
<a th:href="#{userCenter.home.url}">点此重新登录进入学习中心</a>
也就是a的href属性是#{userCenter.home.url}变量。
- ex:
- 那么#{**} **变量都是定义在
resourecs/custom_messages.properties
使用到的变量都在这文件中定义即可访问到 - 所有的html页面放在
resources/template
下
反思
- 对于cas,一直知道项目上使用它,之前尝试自己搞一个觉得好多配置加上对spring的不了解就却步了。但是即使写不出来,也应该搞清楚原理,这样完善项目功能也不会太费力。没有及时去了解,必须反思。
Action
- 以后改变策略,听到新的概念,首先第一步先浅薄的了解5w1h然后再根据能力和时间以及需求衡量是否要自己实现。也就是从大到细先宏观了解,要不没有办法在写代码的时候脑子形成这个新工具的概念架构