Spring Boot+CAS 单点登录之自定义登录页面

开发 架构
CAS Server 对于自定义登录页面其实提供了很好的支持,可以从多个角度来实现,松哥分别来和大家介绍。

 [[411003]]

1.实现思路

CAS Server 对于自定义登录页面其实提供了很好的支持,可以从多个角度来实现,松哥分别来和大家介绍。

CAS Server 上提供的登录页面,早期是用 jsp 写的,我们用的 5.3.2 版本里是用 Thymeleaf 写的,所以现在自定义登录页面也是用 Thymeleaf 来写。

想要自定义登录页面,我们有两种不同的方式:

  1. 直接修改源码,位置在 overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.14/WEB-INF/classes/templates/casLoginView.html,直接就在它的源码基础上改,这个可以实现需求,但是一般不推荐。
  2. 把自定义的登录页面当成 theme 来开发,然后在配置文件中配置 theme,这种方式就很灵活,而且既可以配置全局主题,也可以配置局部主题。全局主题就是所有的登录页面都使用自定义的登录页面,局部主题则是可以根据不同的 CAS Client 来配置,不同的 CAS Client 将看到不同的登录页面。

松哥在这里主要和大家介绍第二种方式。

2.自定义登录页面

首先我们需要提前准备好自己的登录页面,松哥这里还是使用我本系列前面用过的登录页面:

这个大家可以在文末下载页面模版,也可以自己找一个喜欢的登录页面模版,是在找不到,随便写个表单也行,只要实现了自定义的效果即可。

自定义的登录页面准备好之后,接下来,我们创建一个新的目录 src/main/resources/static/themes/mylogin,将自定义页面涉及到的静态资源文件拷贝进去,这里的 themes 目录下专门放置各种自定义登录页面的静态资源,mylogin 相当于是我当前使用的主题名称:

接下来创建 src/main/resources/mylogin.properties 文件,将登录页面中的一些 js、css 引用配置进去,如下:

  1. mylogin.css.style=/themes/mylogin/css/style.css 
  2. mylogin.css.fa=/themes/mylogin/css/font-awesome-4.7.0/css/font-awesome.min.css 
  3. mylogin.js.jq=/themes/mylogin/js/jquery.min.js 
  4. mylogin.js.index=/themes/mylogin/js/index.js 

我的自定义登录页面里边就这四个引用,如果你有更多的引用,就在这里多配置即可,这里的 key 可以自定义,value 就是静态资源的位置。

接下来,创建 src/main/resources/templates/mylogin/casLoginView.html 文件,casLoginView.html 就是你的登录页面,注意文件名不能写错。Thymeleaf 模版默认是在 templates 目录下,所以我们要在 resources 目录下新建 templates 目录,templates 目录下再新建 mylogin 目录。

casLoginView.html 页面内容如下:

  1. <!DOCTYPE html> 
  2. <html lang="zh-CN"
  3. <head> 
  4.     <meta charset="UTF-8"
  5.     <title>江南一点雨</title> 
  6.     <link rel="stylesheet" th:href="@{${#themes.code('mylogin.css.fa')}}"
  7.     <link rel="stylesheet" th:href="@{${#themes.code('mylogin.css.style')}}"
  8.  
  9. </head> 
  10. <body> 
  11.  
  12.  
  13. <div class="materialContainer"
  14.     <div class="box"
  15.         <div class="title">统一认证中心</div> 
  16.         <form method="post" th:object="${credential}" action="login"
  17.             <div class="input"
  18.                 <label for="username">用户名</label> 
  19.                 <input type="text" name="username" id="username"
  20.                 <span class="spin"></span> 
  21.             </div> 
  22.             <div class="input"
  23.                 <label for="password">密码</label> 
  24.                 <input type="password" name="password" id="password"
  25.                 <span class="spin"></span> 
  26.             </div> 
  27.             <input type="hidden" name="execution" th:value="${flowExecutionKey}"/> 
  28.                         <input type="hidden" name="_eventId" value="submit"/> 
  29.                         <input type="hidden" name="geolocation"/> 
  30.             <div class="button login"
  31.                 <button type="submit"
  32.                     <span>登录</span> 
  33.                     <i class="fa fa-check"></i> 
  34.                 </button> 
  35.             </div> 
  36.         </form> 
  37.         <a href="javascript:" class="pass-forgot">忘记密码?</a> 
  38.     </div> 
  39.  
  40.     <div class="overbox"
  41.         <div class="material-button alt-2"
  42.             <span class="shape"></span> 
  43.         </div> 
  44.         <div class="title">江南一点雨-注册</div> 
  45.         <div class="input"
  46.             <label for="regname">用户名</label> 
  47.             <input type="text" name="regname" id="regname"
  48.             <span class="spin"></span> 
  49.         </div> 
  50.         <div class="input"
  51.             <label for="regpass">密码</label> 
  52.             <input type="password" name="regpass" id="regpass"
  53.             <span class="spin"></span> 
  54.         </div> 
  55.         <div class="input"
  56.             <label for="reregpass">确认密码</label> 
  57.             <input type="password" name="reregpass" id="reregpass"
  58.             <span class="spin"></span> 
  59.         </div> 
  60.         <div class="button"
  61.             <button> 
  62.                 <span>注册</span> 
  63.             </button> 
  64.         </div> 
  65.     </div> 
  66.  
  67. </div> 
  68.  
  69. <script th:src="@{${#themes.code('mylogin.js.jq')}}"></script> 
  70. <script th:src="@{${#themes.code('mylogin.js.index')}}"></script> 
  71.  
  72. </body> 
  73. </html> 

这就是一个普通的登录页面,我只是把 js 和 css 的引用修改了下而已,所以这里也就不做过多介绍。

OK,如此之后,我们的登录页面就算定义好了,接下来就是登录页面的引用了。

登录页面引用,我们有两种方式:

第一种是全剧配置,直接在 application.properties 中添加如下配置:

  1. cas.theme.defaultThemeName=mylogin 

mylogin 就是我们在前面反复出现的目录,相当于是我的主题名。这个配置完成后,以后不管是直接在 CAS Server 上登录,还是从 CAS Client 跳转到 CAS Server 上登录,看到的都是自定义登录页面。

第二种方式则是局部配置,局部配置针对某一个 CAS Client 的配置,所以我们可以在 src/main/resources/services/client1-99.json 文件中(复习前面文章就知道该文件怎么来的)添加 theme 配置:

  1.   "@class""org.apereo.cas.services.RegexRegisteredService"
  2.   "serviceId""^(https|http)://.*"
  3.   "name""client1"
  4.   "id": 99, 
  5.   "description""应用1 的定义信息"
  6.   "evaluationOrder": 1, 
  7.   "theme""mylogin" 

这样,以后如果是通过该 CAS Client 跳转到 CAS Server 上登录,则会看到自定义登录页面,如果通过其他 CAS Client 或者直接就在 CAS Server 上登录,则看到的还是默认登录页面,当然我们也可以给其他 CAS Client 再去定义它自己的登录页面。

3.小结

好了,这就是松哥和大家介绍的 CAS 单点登录自定义登录页面的问题,感兴趣的小伙伴可以试试~

本文转载自微信公众号「江南一点雨」,可以通过以下二维码关注。转载本文请联系江南一点雨公众号。

 

责任编辑:武晓燕 来源: 江南一点雨
相关推荐

2021-06-29 12:27:19

Spring BootCAS 登录

2021-07-02 10:45:53

SpringBootCAS登录

2021-07-06 11:42:05

数据库SpringSecurCAS

2021-05-12 08:32:53

Spring Secu 自定义session

2010-02-12 09:32:51

Windows 7修改登录画面

2012-12-03 13:54:15

IBMdW

2024-01-23 13:13:09

2022-06-27 08:16:34

JSON格式序列化

2020-10-18 07:33:58

单点登录cas-serverkeycloak

2024-03-07 09:20:16

2016-12-26 18:05:00

单点登录原理简单实现

2013-10-16 15:17:30

vCenter单点登录

2020-12-28 05:52:27

SSO登录单点

2018-06-21 14:46:03

Spring Boot异步调用

2021-04-26 08:54:17

Spring BootSecurity防重登录

2021-01-06 10:09:05

Spring Boothttps sslhttps

2022-03-07 07:33:24

Spring自定义机制线程池

2012-08-07 09:04:46

单点登录云安全云计算

2022-11-10 07:53:54

Spring参数校验

2022-01-26 07:01:00

开源社区项目
点赞
收藏

51CTO技术栈公众号