基于CAS的单点登录SSO[5]: 基于Springboot实现CAS客户端的前后端分离
作者:家辉,日期:2017-08-24 CSDN博客: http://blog.csdn.net/gobitan
摘要: 现在大部分系统的开发都已经实行前后端彻底分离的开发,而CAS官方的示例还是采用JSP方式的。本文实现了基于Springboot的CAS客户端前后分离示例。
第一步:创建一个包含web支持的Springboot工程。创建方法具体可以参考我之前的文章: http://blog.csdn.net/gobitan/article/details/76462856
包名为:cn.dennishucd,工程名为casclient。
第二步:加入cas-client-autoconfig-support依赖
在pom.xml中加入如下依赖:
<dependency> <groupId>net.unicon.cas</groupId> <artifactId>cas-client-autoconfig-support</artifactId> <version>1.5.0-GA</version> </dependency>
第三步:配置CAS服务器和客户端地址
在application.properties中加入如下配置:
cas.server-url-prefix=https://cas.example.org:8443/cas cas.server-login-url=https://cas.example.org:8443/cas/login cas.client-host-url=http://casclient.com:8080 cas.validation-type=CAS
注意:需在客户端的主机的/etc/hosts加上casclient.com的映射。如果是本机,可以按如下方式加:
127.0.0.1 casclient.com
第四步:配置工程支持Cas客户端
改造主类 CasclientApplication 以下几点:
[1] 加入注解@EnableCasClient增加对Cas客户端的支持;
[2] 加入注解@RestController支持SpringMVC RESTfule;
[3] 增加hello方法;
主类如下:
package cn.dennishucd.casclient; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import net.unicon.cas.client.configuration.EnableCasClient; @SpringBootApplicationient public class CasclientApplication { public static void main(String[] args) { SpringApplication.run(CasclientApplication.class, args); } @GetMapping("/hello") public String hello() { return "Hello World!"; } }
第五步:增加一个html静态资源,以便登录后返回一个页面
在casclient/src/main/resources/static中加入index.html,内容如下:
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="utf-8"> </head> <body> <h1>Hello, world!</h1> </body> </html>
第六步:改造CAS服务器端支持HTTP
根据前面搭建CAS服务器的过程,CAS服务器默认不支持HTTP,只支持HTTPS。而前后端分离的程序HTTPS通常由nginx来完成,所以,本文的demo采用HTTP。这里需要对CAS服务器做一点改造。
[1] 在cas-overlay-template服务器工程下创建/src/main/resources/services目录,然后将cas-overlay-template/target/cas/WEB-INF/classes/services/HTTPSandIMAPS-10000001.json文件拷贝到刚创建的service目录下。
[2] 修改HTTPSandIMAPS-10000001.json内容如下:
核心的修改就是在serviceId中增加了http。修改完之后,执行./build.sh重新启动CAS服务器。
第七步:测试前后端分离的CAS客户端
{ "@class" : "org.apereo.cas.services.RegexRegisteredService", "serviceId" : "^(https|imaps|http)://.*", "name" : "HTTPS, IMAPS and HTTP", "id" : 10000001, "description" : "This service definition authorizes all application urls that support HTTPS, IMAPS and HTTP protocols.", "evaluationOrder" : 10000 }
先访问: http://casclient.com:8080/index.html ,系统会跳转到CAS服务器的登录地址。成功后返回到index.html页面。此时,如果再请求 http://casclient.com:8080/hello 也会成功。同理,先测试hello地址,系统也会跳转到CAS服务器的登录地址。
其他:如果想抓包查看CAS客户端和服务器之间的交互,可以在CAS服务器端将server.ssl.enabled的值设置为false即可将服务器更换为HTTP。然后同时将客户端配置中服务器地址中的https改为http即可。
参考资料:
[1] https://github.com/Unicon/cas-client-autoconfig-support