CAS Client 3.2.1 配置详解

CAS Client 3.2.1 配置详解

http://www.pinhuba.com/casclient/101256.htm

摘要: CAS作为开源的单点登陆框架已经非常的流行了。由于它对已有系统的入侵性小,支持的语言多,备受广大开发者关注;

CAS作为开源的单点登陆框架已经非常的流行了。由于它对已有系统的入侵性小,支持的语言多,备受广大开发者关注;也是很多公司将之作为单点登陆的首选框架。关于CAS如何搭建的文章,网上已经非常多了,随便搜搜都一大堆。我也就不再写些重复的东西了,但是网上的东西有时候常常是不全,或版本问题搞的很多人都很迷糊。我曾经也很迷糊,如果刚接触CAS,请你继续往下看;如果你是CAS高手,请指正我说错的地方。

CAS最早是耶鲁大学开发的(CAS2.0以前的版本),后来开源出来由JASIG来继续开发(CAS2.0以后的版本)。所以,当你准备那某一片文章上手练习的时候请分清版本。个人建议还是阅读JASIG官方文档比较好。https://wiki.jasig.org/display/CASC

一个完整的单点登陆方案分两部分

CAS server

CAS server如何配置就不多说了,基本的步骤就是

1. 下载CAS server包

2. 配置Tomcat的Https访问设置

3. 部署CAS server,其实就是将.war文件拷贝到Tomcat目录下

4. 生成证书(可以买,也可以使用自签名证书,或者干脆就用http协议,那就不需要证书了)

5. 修改用户访问配置(CAS支持关系数据库,LDAP等多种数据存储)

CAS client

CAS client是部署在应用端的,因为通常单点登陆都会涉及到对已有系统的改造。所以,client端的侵入性就变的很重要。侵入性越小,越容易部署和测试。CAS框架的优点之一就在于它的client端对应用系统的侵入性比较小。对于Java的Web项目来说,你只需要在web.xml里面添加一个filter,拷贝CAS client的jar包到应用系统,然后改造登陆认证过程即可。如果CAS server用的是Https,那就还需要将证书导入到JVM的可信证书域中,通常是($JAVA_HOME/lib/security/cacerts)。

所有的一切看着都挺简单的,但实际部署中你会遇到各式各样的问题。有很多问题网上都有人解答,这里我就记录一下我遇到的一个没找到答案的问题?

现象:

当你配置完CAS server, 也部署了CAS client后。用https登陆CAS server也都没问题时,而你无论如何都无法在登陆后跳转到你期待的页面。尽管一切看起来都配置对了,证书也导了,https也配了,filter也加了。但是还是不停的抛CAS ticket validation expection, CAS server no response错误。

解决方案:

请检查你的client是否把4个filter都配置全了,并且顺序要对。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<!-- CAS SSO -->
   <filter>
       <filter-name>CAS Authentication Filter</filter-name>
       <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
       <init-param>
           <param-name>casServerLoginUrl</param-name>
           <param-value>https://cas-server:8443/cas/login</param-value>
       </init-param>
       <init-param>
           <param-name>renew</param-name>
           <param-value>false</param-value>
       </init-param>
       <init-param>
           <param-name>gateway</param-name>
           <param-value>false</param-value>
       </init-param>
       <init-param>
           <param-name>serverName</param-name>
           <param-value>http://client-host:8080</param-value>
       </init-param>
   </filter>
  
   <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>https://cas-server:8443/cas/</param-value>
       </init-param>
       <init-param>
           <param-name>serverName</param-name>
           <param-value>http://client-host:8080</param-value>
       </init-param>
       <init-param>
           <param-name>useSession</param-name>
           <param-value>true</param-value>
       </init-param>
       <init-param>
           <param-name>redirectAfterValidation</param-name>
           <param-value>true</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>
       <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 Authentication Filter</filter-name>
       <url-pattern>/sso/*</url-pattern>
   </filter-mapping>
   <filter-mapping>
       <filter-name>CAS Validation Filter</filter-name>
       <url-pattern>/sso/*</url-pattern>
   </filter-mapping>
   <filter-mapping>
       <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
       <url-pattern>/sso/*</url-pattern>
   </filter-mapping>
   <filter-mapping>
       <filter-name>CAS Assertion Thread Local Filter</filter-name>
       <url-pattern>/sso/*</url-pattern>
   </filter-mapping>

官方文档特别说明这4个Filter是必须的

1
The correct order of the filters in web.xml is necessary:

AuthenticationFilter

TicketValidationFilter (whichever one is chosen)

HttpServletRequestWrapperFilter

AssertionThreadLocalFilter

这里我要说明一下为什么这4个filter是必须要配的。

AuthenticationFilter的作用是用于拦截SSO登陆请求的,当你提交的request符合SSO登陆规则,CAS client会通过这个filter将登陆请求转向到CAS server的登陆界面。因为这是第一步,所以它要在最上面。

TicketValidationFilter的作用是用于拦截登陆返回的跳转请求的。当CAS server确认登陆用户名密码后,会返回一个server ticket,这个ticket会由应用服务器上的CAS client再送回CAS server进行验证,用于防止仿冒攻击的。

HttpServletRequestWrapperFilter的目的是将CAS server返回的信息封装到Http request里面,这样客户端就可以用request.getRemoteUser()来获取用户名等信息了。

AssertionThreadLocalFilter的作用是用于前端程序(通常是前端脚本程序)访问,因为这个时候你无法通过request来获取信息。

所以如果这4个filter不配置正确,就会报各种错误。

转载于:https://www.cnblogs.com/handsome1013/p/8920231.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/414191.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

已经改成UTF-8了,git提交properties还是乱码

原因idea的File Encoding勾选了Transparent native-to-ascii conversion 如果团队中都勾选了则无所谓、如果有的勾选、有的没勾选合并代码会出现乱码。

RabbitMQ六种队列模式-发布订阅模式

前言 RabbitMQ六种队列模式-简单队列 RabbitMQ六种队列模式-工作队列 RabbitMQ六种队列模式-发布订阅 [本文] RabbitMQ六种队列模式-路由模式 RabbitMQ六种队列模式-主题模式 上文的工作队列模式是直接在生产者与消费者里声明好一个队列&#xff0c;这种情况下消息只会对应同类…

工作288:跨组件传值

putAction("/order/"this.$parent.$parent.ListId"/status",{status:-1,remark: this.remark}).then(res>{this.$message({message: 退回已提交,type: success});this.$emit("ok")this.dialogVisiblefalse跨组件传值

javafx HBOX按钮右对齐

<HBox spacing"20" alignment"CENTER_LEFT"> <!---关键在这里----><HBox HBox.hgrow"ALWAYS"></HBox><JFXButton prefWidth"100" fx:id"dialogCommitButton" prefHeight"40" textAlig…

景山公园

转载于:https://www.cnblogs.com/optor/p/8928938.html

RabbitMQ六种队列模式-工作队列模式

前言 RabbitMQ六种队列模式-简单队列 RabbitMQ六种队列模式-工作队列 [本文] RabbitMQ六种队列模式-发布订阅 RabbitMQ六种队列模式-路由模式 RabbitMQ六种队列模式-主题模式 上文我们了解了 RabbitMQ 六种队列模式中的简单队列&#xff0c;代码也是非常的简单&#xff0c;比较…

工作289:父子组件传值控制弹窗关闭

resetreson <template><el-dialogtitle"审核退回":visible.sync"dialogVisible"width"30%"append-to-body><el-form ref"form"><el-form-item label"退回原因" ><el-input v-model"remark…

Redhat Linux 7.3 虚拟机通过USB挂载NTFS格式的移动硬盘

分为如下几个步骤&#xff1a; 一、设置本地yum&#xff0c;安装gcc&#xff08;如果本机已经安装gcc&#xff0c;则跳过此步&#xff09; 在虚拟机连接linux iso安装盘查看光盘挂载情况mkdir /isomount /dev/cdrom /isocd /etc/yum.repos.d/vi local.repo[local] namelocal ba…

RabbitMQ六种队列模式-简单队列模式

前言 RabbitMQ六种队列模式-简单队列 [本文] RabbitMQ六种队列模式-工作队列 RabbitMQ六种队列模式-发布订阅 RabbitMQ六种队列模式-路由模式 RabbitMQ六种队列模式-主题模式 在官网的教程中&#xff0c;描述了如上六类工作队列模式&#xff1a; 简单队列模式&#xff1a;最简…

工作290:重置新增的mode

/*4 GY定义 找到该组件下面的add方法*/add() {/* 5GY定义 给当前属性下面的title赋值*/this.title "新增";/*重置新增的mode*/this.mode[]this.show();this.IsShowtrue;this.attrthis.viewMode false;this.approveMode false/* 7GY定义 给当前的form赋值 并进行对…

串口数据字节位的理解

# STM32F4xx系列的MCU的UART数据字节组成如下图 # 发送数据做如下图示&#xff0c;data byte MSB 与 Parity 重合 # 先刨去 Parity bit&#xff0c;分析 LSB ~ MSB 的纯数据&#xff1a; > 假定数据中的 ‘1’ 个数为奇数&#xff0c;偶校验&#xff1a;Parity ‘1’&#…

RabbitMQ消息确认机制

文章目录1. 事务机制2. Confirm模式2.1 生产者2.1.1 普通Confirm模式2.1.2 批量Confirm模式2.1.3 异步Confirm模式2.2 消费者3. 其他消费者如何确保消息一定能够消费成功呢&#xff1f;由于在前面工作队列模式里面我们了解了应答模式&#xff0c;所以我们可以很自信的回答如上题…

工作292:数据绑定逻辑处理

},confirmAssociation() {if(this.selected!"") {putAction(this.url.put / this.task_id /bound, {content_id: this.selected}).then(res > {this.$message.success("绑定成功");this.$emit("ok")this.$refs["dialog"].close(…

工作293:调节删除顺序删除

}this.$confirm(您确定删除吗?, 提示, {confirmButtonText: 确定,cancelButtonText: 取消,type: warning}).then(res>{this.loadingtruedeleteAction(path.join(this.url.delete, record.id))/* this.list()*/this.reload()this.$message.success("删除成功");th…

RabbitMQ消息幂等性问题

文章目录1. 什么是幂等性&#xff1f;1.1 消息队列的幂等性1.2 模拟重试机制1.2.1 生产者代码1.2.2 消费者代码1.2.3 消费者 application.yml 配置2. 如何保证消息幂等性&#xff0c;不被重复消费&#xff1f;解决方法1. 什么是幂等性&#xff1f; 在编程中一个幂等操作的特点是…

JAVA面向对象明星类

public class _01Celebrity{//属性public String name;public int age;public double height;public char gender;//构造器public _01Celebrity(String name,int age,double height,char gender){this.name name;this.age age;this.height height;this.gender gender;}//方…

工作287:命名报错

return:{data:{account_id: ,BindData: [],RomoteData:[],dialogVisible: false,ff_account_index: ,form:{},}},这种命名报错

Centos安装JDK(java环境)

王小私下问我 centos 中 jdk 怎么安装呀&#xff0c;所以再次整理了这篇基础环境搭建的文章。 1、创建java目录2、下载上传jdk3、解压jdk4、配置环境变量 1、创建java目录 首先我们创建java的安装目录 cd /usrmkdir javacd java 2、下载上传jdk 我们如上在 usr 目录下创建了 ja…

iOS用workspace和cocoapods管理多个项目

工作空间下多工程共享cocoapods第三方库的方法 引自 https://www.jianshu.com/p/e3cfae830985转载于:https://www.cnblogs.com/-WML-/p/8946370.html

工作288:根据时间戳处理接口

<template><div class"table-list-page"><div class"query-area"><el-date-pickerv-model"value1"type"daterange"range-separator"至"start-placeholder"开始日期"end-placeholder"结…