简介 项目需求中其中有一个就是根据不同的登录方式,跳转到不同的首页,现实中登录后跳转根据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