版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gobitan/article/details/77727175
基于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客户端
注意:需在CAS客户端所在主机把casclient.com的域名和IP地址映射加上。
{
"@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即可。
参考资料: