转载

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

基于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

原文  http://blog.csdn.net/gobitan/article/details/77727175
正文到此结束
Loading...