上一节我们搭建了cas server。这一节我们将搭建两个客户端完成单点登录的测试。

1、前提约束

  • 完成搭建cas serverhttps://www.jianshu.com/p/ed0c1359b82d

2、操作步骤

2.1 创建cas-client1,假设端口为9001

  • 创建maven的web工程,名字为cas-client1,另一个工程名称为cas-client2https://www.jianshu.com/p/042073b7710b
  • 在pom.xml中加入以下依赖
        <dependency><groupId>org.jasig.cas.client</groupId><artifactId>cas-client-core</artifactId><version>3.3.3</version></dependency><!-- Spring --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>4.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>4.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>4.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jms</artifactId><version>4.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>4.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>4.2.4.RELEASE</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency>

  • 修改web.xml
<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app><display-name>Archetype Created Web Application</display-name><!-- 用于单点退出,该过滤器用于实现单点登出功能,可选配置 --><listener><listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class></listener><!-- 该过滤器用于实现单点登出功能,可选配置。 --><filter><filter-name>CAS Single Sign Out Filter</filter-name><filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class></filter><filter-mapping><filter-name>CAS Single Sign Out Filter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- 该过滤器负责用户的认证工作,必须启用它 --><filter><filter-name>CASFilter</filter-name><filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class><init-param><param-name>casServerLoginUrl</param-name><param-value>http://localhost:8080/cas/login</param-value><!--这里的server是服务端的IP --></init-param><init-param><param-name>serverName</param-name><param-value>http://localhost:9001</param-value></init-param></filter><filter-mapping><filter-name>CASFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- 该过滤器负责对Ticket的校验工作,必须启用它 --><filter><filter-name>CAS Validation Filter</filter-name><filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class><init-param><param-name>casServerUrlPrefix</param-name><param-value>http://localhost:8080/cas</param-value></init-param><init-param><param-name>serverName</param-name><param-value>http://localhost:9001</param-value></init-param></filter><filter-mapping><filter-name>CAS Validation Filter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- 该过滤器负责实现HttpServletRequest请求的包裹, 比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。 --><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 HttpServletRequest Wrapper Filter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- 该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。 比如AssertionHolder.getAssertion().getPrincipal().getName()。 --><filter><filter-name>CAS Assertion Thread Local Filter</filter-name><filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class></filter><filter-mapping><filter-name>CAS Assertion Thread Local Filter</filter-name><url-pattern>/*</url-pattern></filter-mapping><servlet><servlet-name>dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-mvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
</web-app>

  • 在项目/src/main/resources下创建spring-mvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><context:component-scan base-package="net.wanho.controller"></context:component-scan>
</beans>

  • 在项目/src/main/java下创建net.wanho.controller包
  • 在项目/src/main/java的net.wanho.controller包中创建UserController.java
package net.wanho.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.http.HttpSession;@Controller
public class UserController {/*** 退出api,这里只需要提供一个api就行,不使用springmvc也是可以的*/@RequestMapping("/logout")public String logout(HttpSession session) {session.invalidate();return "redirect:http://localhost:8080/cas/logout?service=http://www.baidu.com";}
}

  • 在项目/src/main/webapp中创建index.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>江苏万和</title>
</head>
<body>
<%--第二个项目这里改为client2,以示区分--%>
client1 欢迎来到万和
<%=request.getRemoteUser()%>
<a href="/logout">退出</a>
</body>
</html>

2.2 以同样的方式创建cas-client2,注意其中与client1不同的地方,假设端口为9002

2.3 修改D:Program Filesapache-tomcat-8.5.32webappscasWEB-INFcas.properties,测试在退出之时可以跳转到其他页面

cas.logout.followServiceRedirects=true

2.4 测试

(1) 重启cas server,启动cas-client1,启动cas-client2
(2)访问http://localhost:9001,得到以下界面

(3)输入zhangli/123456,点击“LOGIN”,跳转到以下界面

(4)在另一个标签中访问 http://localhost:9002,得到以下界面

(5)在http://localhost:9002所在的界面上点击“退出”,则跳到了百度首页

(6)再次刷新http://localhost:9001,再次跳转到了登录界面

以上就是casserver集合casclient1,casclient2完成的单点登录测试。

cas 单点登录_47 使用cas完成单点登录-02 搭建cas client完成单点登录相关推荐

  1. SSO单点登录详解-------八、搭建CAS Client服务端

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

  2. 单点登录 cas 设置回调地址_cas客户端流程详解(源码解析)单点登录

    博主之前一直使用了cas客户端进行用户的单点登录操作,决定进行源码分析来看cas的整个流程,以便以后出现了问题还不知道是什么原因导致的 cas主要的形式就是通过过滤器的形式来实现的,来,贴上示例配置: ...

  3. [sso]搭建CAS单点服务器

    1.下载服务器端文件 Cas Client下载:http://developer.jasig.org/cas-clients/ CAS Server:cas-server-4.0.0-release. ...

  4. CAS学习笔记五:SpringBoot自动/手动配置方式集成CAS单点登出

    本文目标 基于SpringBoot + Maven 分别使用自动配置与手动配置过滤器方式实现CAS客户端登出及单点登出. 本文基于<CAS学习笔记三:SpringBoot自动/手动配置方式集成C ...

  5. CAS统一登录认证(1): 搭建 CAS Server

    搭建 CAS Server 一.CAS单点登录-简介 1.1 CAS 简介 CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的.开源的项 ...

  6. CSA实现单点登录原理详解 ,如何判断访问不同域名时用户是否登录

    原理图 www.cas.client.com为cas客户端,也就是用户要访问的资源所在,www.cas.server.com为cas服务端,是单点登录的认证中心. 图中各步骤拆解说明: ①:首先用户访 ...

  7. Linux 搭建NodeBB社区,搭建CAS登录认证平台,实现Nodebb接入企业CAS认证(二)

    上编文章已经实现nodebb,cas的搭建,这个文章就是如何实现nodebb接入cas认证 一,Nodebb的插件开发,实现对cas的接入 1,下载cas接入插件, GitHub - ld000/no ...

  8. Linux 搭建NodeBB社区,搭建CAS登录认证平台,实现Nodebb接入企业CAS认证(一)

    一,搭建Nodebb社区 1,安装编译环境nodejs,npm安装后版本号如下(同时得安装redis, git常用开发软件): 2,下载nodebb代码 git clone git://github. ...

  9. cas协议,以及tomcat搭建cas服务器

    1.      CAS 简介 1.1.  What is CAS ? CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的.开源的项目,旨 ...

最新文章

  1. 基于opencv的简单视频处理类示例
  2. 人工智能及其应用(第5版).蔡自兴-1章课后习题。【暂时无答案】
  3. 如何停止电脑正在运行的VBS程序?
  4. 数据结构-----栈
  5. 【PC工具】GiliSoft Video Editor目测还可以的视频制作工具,视频裁剪、转换、合并、加水印、加特效...
  6. 4万字长文ClickHouse应用实战-物化视图在微信的实践
  7. 【学术相关】研究生第一篇学术论文常犯问题总结
  8. python获取电脑硬件信息_Python实现的读取电脑硬件信息功能示例
  9. SpringAop对struts2的Action设置切面织入时报错java.lang.NoSuchMethodException
  10. 细节:关于异步调用的解决方案
  11. sharding-jdbc水平分库与垂直分库
  12. python创建和删除文件有什么区别_python创建和删除文件
  13. python编程的50种基础算法_Python入门教程:几种常见的Python算法实现
  14. Python刷博客简易版
  15. gophish企业内部钓鱼邮件测试
  16. CAD颜色索转RGB(方法一)
  17. PFX提取 cer 提取 公钥和私钥及PHP读取cer 文件和pfx文件证书
  18. 家用服务器 无线路由器,评测六款热门家用Wi-Fi 6路由器
  19. php两个时间相差月数,计算两个日期之间相隔的月数
  20. java分布式实现图片上传到图片服务器

热门文章

  1. 原创内容屡屡被盗?从源头对资源盗用说NO
  2. 现代的缓存设计方案:Window-TinyLFU
  3. Python练习题14
  4. 单元测试之DBUnit的使用以及原理剖析
  5. 解决Git中的fatal: refusing to merge unrelated histories
  6. 一次看完28个关于ES的性能调优技巧
  7. 刁钻!你和队友之间选一个淘汰,你怎么选?
  8. 直击Kafka的心脏——控制器
  9. IBM Cloud:裸金属服务器+多云策略助力音视频解决方案成功出海
  10. 音视频技术开发周刊(第128期)