转自:https://blog.csdn.net/zhouzhiwengang/article/details/90053313
项目整体结构

自定义页面涉及资源全部存放再src/main/resources 文件夹目录下:
目录 |
含义 |
services |
配置自定义登入网站模板 |
static |
静态文件目录,用于存放js,css代码的 |
templates |
模板文件目录,用于存放html |
digipower.properties |
存放digipower网站模板的配置信息 |
services 目录配置
service目录,设定每一个子网站对应的请求样式,如果不设定,默认使用指定默认样式。
HTTPSandIMAPS-10000001.json 文件解析
该json配置文件是系统默认的登录模板,自定义模板配置文件规则:文件名称+id.json,如果不是这种格式cas 服务端不然找不到配置文件。

HTTPSandIMAPS-10000001.json 文件内容:
{
"@class":
"org.apereo.cas.services.RegexRegisteredService",
"serviceId":
"^(https|imaps)://.*",
"name":
"HTTPS and IMAPS",
"id":
10000001,
"description":
"This service definition authorizes all application urls that support HTTPS and IMAPS protocols.",
"evaluationOrder":
10000
}
自定义模板配置文件内容(digipower-1000.json):
{
"@class":
"org.apereo.cas.services.RegexRegisteredService",
"serviceId":
"^(https|imaps|http)://.*",
"name":
"digipower",
"id":
1000,
"description":
"CAS-SSO 登入",
"evaluationOrder":
10,
"theme":
"digipower"
}
注意:设置cas需要从json文件做初始化操作,不然我们配置的json没有生效
# cas 自定义登入界面
# 默认主题
cas.theme.defaultThemeName=digipower
# 开启识别json文件,默认false
cas.serviceRegistry.initFromJson=true
static 文件夹
digipower.css:
h1 {
color: blue;
}
templates 登录模板
目录结构可以看到,每个子站点,都会新建一个文件夹,文件夹的名称需要和 service里面配置站点的theme的名称对应上,casLoginView.html 这个模板的名称,不能瞎改,这个是固定的
<!
DOCTYPE
html
>
<
html
>
<
head
>
<
meta
charset=
"UTF-8"
/>
<
meta
name=
"viewport"
content=
"width=device-width, initial-scale=1"
/>
<
meta
http-equiv=
"X-UA-Compatible"
content=
"IE=edge"
/>
<
title
th:text=
"${#themes.code('digipower.pageTitle')}"
></
title
>
<
link
rel=
"stylesheet"
th:href=
"@{${#themes.code('digipower.css.file')}}"
/>
</
head
>
<
body
>
<
h1
th:text=
"${#themes.code('digipower.pageTitle')}"
></
h1
>
<
h2
>CAS-SSO 单点登录
</
h2
>
<
div
>
<
form
method=
"post"
th:object=
"${credential}"
>
<
div
th:if=
"${#fields.hasErrors('*')}"
>
<
span
th:each=
"err : ${#fields.errors('*')}"
th:utext=
"${err}"
/
>
</
div
>
<
h2
th:utext=
"#{screen.welcome.instructions}"
></
h2
>
<
section
class=
"row"
>
<
label
for=
"username"
th:utext=
"#{screen.welcome.label.netid}"
/
>
<
div
th:unless=
"${openIdLocalId}"
>
<
input
class=
"required"
id=
"username"
size=
"25"
tabindex=
"1"
type=
"text"
th:disabled=
"${guaEnabled}"
th:field=
"*{username}"
th:accesskey=
"#{screen.welcome.label.netid.accesskey}"
autocomplete=
"off"
/>
</
div
>
</
section
>
<
section
class=
"row"
>
<
label
for=
"password"
th:utext=
"#{screen.welcome.label.password}"
/
>
<
div
>
<
input
class=
"required"
type=
"password"
id=
"password"
size=
"25"
tabindex=
"2"
th:accesskey=
"#{screen.welcome.label.password.accesskey}"
th:field=
"*{password}"
autocomplete=
"off"
/>
</
div
>
</
section
>
<
section
>
<
input
type=
"hidden"
name=
"execution"
th:value=
"${flowExecutionKey}"
/>
<
input
type=
"hidden"
name=
"_eventId"
value=
"submit"
/>
<
input
type=
"hidden"
name=
"geolocation"
/>
<
input
class=
"btn btn-submit btn-block"
name=
"submit"
accesskey=
"l"
th:value=
"#{screen.welcome.button.login}"
tabindex=
"6"
type=
"submit"
/>
</
section
>
</
form
>
</
div
>
</
body
>
</
html
>
配置模板信息
digipower.properties:
# 自定义登入首页相关参数配置
#定义的字段和信息,可以在页面读取到
digipower.css.file=/themes/digipower/css/digipower.css
digipower.pageTitle=CAS-SSO 登入
启动服务
到项目的根目录,找到build.cmd,然后debug启动服务。
build.cmd debug
访问测试

