SSO单点登录教程(九)CAS-搭建CAS Client客户端

作者:蓝雄威,叩丁狼教育高级讲师。原创文章,转载请注明出处。

一、前言

目前为止我们已经搭建好了CAS Server端,我们需要来搭建客户端配合使用,完成单点登录和单点注销的功能.我们将讲两种方式来搭建CAS Client端.一种是普通项目搭建,另一种是基于SpringBoot的项目搭建.

二、普通项目搭建CAS Client

官方提供了一个简易的模板来搭建CAS Client.
Github地址:https://github.com/cas-projects/cas-sample-java-webapp
下载导入项目之后,我们只需要稍作修改,运行起来就可以使用了.
步骤:
1.下载之后导入到工具中,导入之后项目结构如下图:

项目结构

2.项目默认使用的jetty的启动插件.如果使用tomcat的插件,需要在pom.xml中把jetty配置去掉,添加tomcat的插件.

<plugin>
          <groupId>org.apache.tomcat.maven</groupId>
          <artifactId>tomcat7-maven-plugin</artifactId>
          <version>2.2</version>
          <configuration>
               <port>8088</port>
                <path>/</path>
          </configuration>
</plugin>

3.修改web.xml,把里面所有的``casServerUrlPrefix对应的value值换成你统一认证中心的域名,把所有serverName对应的value值换成你当前项目的域名.下方配置也标记了什么地方需要修改.
一定得改对,否则在访问的时候会出现票根'ST-1-SSAyf0nFMvmVBvEBSXyg-cas'不符合目标服务的错误.

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<!--
   <context-param>
       <param-name>renew</param-name>
       <param-value>true</param-value>
   </context-param>
-->

    <filter>
        <filter-name>CAS Single Sign Out Filter</filter-name>
        <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
        <init-param>
            <param-name>casServerUrlPrefix</param-name>
            <!--此处需要修改-->
            <param-value>https://www.sso.com:8443/cas</param-value>
        </init-param>
    </filter>

    <listener>
        <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
    </listener>

    <filter>
        <filter-name>CAS Authentication Filter</filter-name>
        <!--<filter-class>org.jasig.cas.client.authentication.Saml11AuthenticationFilter</filter-class>-->
        <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
        <init-param>
            <param-name>casServerLoginUrl</param-name>
            <!--此处需要修改-->
            <param-value>https://www.sso.com:8443/cas/login</param-value>
        </init-param>
        <init-param>
            <param-name>serverName</param-name>
            <!--此处需要修改-->
            <param-value>http://www.crm.com:8088</param-value>
        </init-param>
    </filter>

    <filter>
        <filter-name>CAS Validation Filter</filter-name>
        <!--<filter-class>org.jasig.cas.client.validation.Saml11TicketValidationFilter</filter-class>-->
        <filter-class>org.jasig.cas.client.validation.Cas30ProxyReceivingTicketValidationFilter</filter-class>
        <init-param>
            <param-name>casServerUrlPrefix</param-name>
            <!--此处需要修改-->
            <param-value>https://www.sso.com:8443/cas</param-value>
        </init-param>
        <init-param>
            <param-name>serverName</param-name>
            <!--此处需要修改-->
            <param-value>http://www.crm.com:8088</param-value>
        </init-param>
        <init-param>
            <param-name>redirectAfterValidation</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>useSession</param-name>
            <param-value>true</param-value>
        </init-param>
        <!--
        <init-param>
            <param-name>acceptAnyProxy</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>proxyReceptorUrl</param-name>
            <param-value>/sample/proxyUrl</param-value>
        </init-param>
        <init-param>
            <param-name>proxyCallbackUrl</param-name>
            <param-value>https://mmoayyed.unicon.net:9443/sample/proxyUrl</param-value>
        </init-param>
        -->
        <init-param>
            <param-name>authn_method</param-name>
            <param-value>mfa-duo</param-value>
        </init-param>
    </filter>

    <filter>
        <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
        <filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>CAS Single Sign Out Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter-mapping>
        <filter-name>CAS Validation Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter-mapping>
        <filter-name>CAS Authentication Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter-mapping>
        <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <welcome-file-list>
        <welcome-file>
            index.jsp
        </welcome-file>
    </welcome-file-list>
</web-app>

三、测试

运行tomcat7:run命令,把客户端启动起来.浏览器输入http://www.crm.com:8088/index.jsp,此时页面会跳转到统一认证中心的登陆页面.
但是会看到如下的错误信息:未认证授权的服务,
这是因为CAS Server端默认只接收https的客户端请求,如果想让CAS Server支持http协议的客户端请求,需要在服务端添加一些配置.

未认证授权的服务

服务端修改如下:
操作步骤(1)
1.1 拷贝overlays/org.apereo.cas.cas-server-webapp-tomcat-5.2.3/WEB-INF/classes/services/HTTPSandIMAPS-10000001.json文件到/src/main/resources/services目录.
1.2 修改services\HTTPSandIMAPS-10000001.json文件
"serviceId" : "^(https|imaps)://."
改为==>
"serviceId" : "^(https|http|imaps)://.
",

操作步骤(2): 在application.properties文件中添加:
cas.tgc.secure=false
cas.serviceRegistry.initFromJson=true

配置好之后,重新启动客户端和服务端.登陆之后会自动跳转到客户端的首页.看到如下这张图说明CAS Server端和CAS Client端已经整合成功.


四、单点注销

CAS框架已经集成了单点注销的功能,只需要统一认证中心注销之后,所有的子系统都统一的注销了.
启动两个客户端,端口分别为8088,8089,在访问的时候只需要访问一次即可.
当统一认证中心注销的时候,所有的子系统都统统注销了.
这需要在客户端中的退出按钮,指向统一认证中心的注销方法即可

<a href="https://www.sso.com:8443/cas/logout?service=http://www.crm.com:8088/index.jsp">注销</a>

当我们访问完这个方法之后,所有的子系统会自动的注销.
1.默认请求访问统一认证中心的logout方法后,响应的是统一认证中心的注销页面.
2.如果我们希望注销之后,能回到子系统中的某个页面,此时可以在地址栏后面添加service的参数,统一认证中心会在注销之后,会重定向到http://www.crm.com:8088/index.jsp这个地址.这个需要在服务端配置一个参数:
cas.logout.followServiceRedirects=true

五、基于SpringBoot的客户端集成CAS

SpringBoot相关的知识.
叩丁狼教育-Springboot高级实战课(第一期)
叩丁狼教育-Springboot高级实战课(第二期)
我们要在SpringBoot的环境下使用CAS的功能,首先需要想到的是有没有对应的starter可以帮我们快速构建.我们使用使用了cas-client-autoconfig-support项目的集成能力.Github地址:
https://github.com/Unicon/cas-client-autoconfig-support
步骤:
1.在SpringBoot应用的Maven配置文件(pom.xml)中添加依赖:

<dependency>
  <groupId>net.unicon.cas</groupId>
  <artifactId>cas-client-autoconfig-support</artifactId>
  <version>1.5.0-GA</version>
</dependency>

2.在应用启动入口类上添加配置@EnableCasClient,示例:

@SpringBootApplication
@EnableCasClient
public class CrmApplication{ .. }

3.在应用的配置文件中(application.properties)添加如下配置:

# 项目端口
server.port=8088
# 填CAS服务器的前缀
cas.server-url-prefix=https://www.sso.com:8443/cas
# 填CAS服务器的登录地址
cas.server-login-url=https://www.sso.com:8443/cas/login
# 填客户端的访问前缀 www.crm.com是在host文件中配置的映射,映射到127.0.0.1
cas.client-host-url=http://www.crm.com:8088

启动项目即可,这样SpringBoot就和CAS集成完成了.

WechatIMG9.jpeg
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容