您的位置:首页 > 编程语言 > Java开发

基于CAS的单点登录SSO[5]: 基于Springboot实现CAS客户端的前后端分离

2017-08-30 23:16 2261 查看
基于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即可。

参考资料:
[1] https://github.com/Unicon/cas-client-autoconfig-support
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息