0%

CAS登录成功跳转

简介

项目需求中其中有一个就是根据不同的登录方式,跳转到不同的首页,现实中登录后跳转根据url后的service来做回调,但是在需求中,用户会直接进入到登录页面进行登录,登录页面有不同的登录方式,每一种登录方式成功后都会跳转到不同的页面,如果在访问的时候url中没有带上service参数的回调地址,那么cas会跳转到cas默认的登录页面,并且将登录的一些参数带在url后返回到登录页面,那么要实现这个需求我们只需要改造默认的登录成功页面,根据待在回调url后的参数即可知道是哪一种方式登录的,并根据回调后的参数进行页面跳转

改造默认登录页

CAS 默认的登录成功页是在templates目录下的casGenericSuccessView.html我们对其进行改造,我们改造原有的页面,将自己的逻辑加进去,如下面的逻辑是在登录成功后首先会获取登录时上传的type参数,根据type类型的不同进行不同页面的跳转

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<!DOCTYPE html>
<html>

<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script>
<!--<title th:text="#{screen.success.header}">Generic Success View</title>-->
<!--<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />-->
</head>

<body>
<!--此页面是登录完成如果url中没有带service参数的话进入到此页面-->
</body>
<script>
$(function () {
//type为登录时自定义的参数,在登录成功后会将登录的参数待在url后面并且跳转回回调url
var type = getQueryString("type");
if (type == 1) {
//这里做了nginx反向代理,换成实际的回调url
location.href = "http://192.168.171.46/client3/welcome1";
} else if (type == 2) {
//这里做了nginx反向代理,换成实际的回调url
location.href = "http://192.168.171.46/client3/welcome2";
} else {
alert("不存在type参数无法跳转")
}

});


function getQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
var r = window.location.search.substr(1).match(reg); //匹配目标参数
if (r != null) return decodeURI(r[2]);
return null;
}


</script>


</html>

覆盖CAS的casGenericSuccessView.html页面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<warName>cas</warName>
<failOnMissingWebXml>false</failOnMissingWebXml>
<recompressZippedFiles>false</recompressZippedFiles>
<archive>
<compress>false</compress>
<manifestFile>${manifestFileToUse}</manifestFile>
</archive>
<overlays>
<overlay>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-webapp${app.server}</artifactId>
<!--原有的服务不再初始化进去-->
<excludes>
<exclude>WEB-INF/classes/services/*</exclude>
<exclude>WEB-INF/classes/application.*</exclude>
<exclude>WEB-INF/classes/log4j2.*</exclude>
<exclude>WEB-INF/classes/webflow/login/*.xml</exclude>
<exclude>WEB-INF/classes/templates/fragments/loginform.html</exclude>
<exclude>WEB-INF/classes/templates/casLoginView.html</exclude>
<!--将默认的登录成功页面替换成我们自带的页面 -->
<exclude>WEB-INF/classes/templates/casGenericSuccessView.html</exclude>
</excludes>
</overlay>
</overlays>
</configuration>
</plugin>

代码

https://github.com/liushprofessor/cas_demo