cas深度解析:cas 客户端是如何验证serviceTicket(简称st)的?

本文深入解析CAS认证系统中ticket的两种验证方式:基于TicketValidator和Filter。通过剖析Cas20ServiceTicketValidator类和Cas20ProxyReceivingTicketValidationFilter自定义类的源码,详细解释了如何验证ticket以及如何从CAS Server获取用户数据。

今天有同事问子涵先生,cas获取用户数据的时候,是请求了什么接口?额,,,一时语顿……似乎问题没提在点子上。
请求什么接口……明明是客户端远程请求cas Server验证了ticket之后,由cas Server重定向送过来的嘛!当然你也可以理解为请求了什么接口,只是这个接口的参数是ticket和客户端的serviceUrl组成的,对,就是你登录的那个url。想了解更多,请阅读下文吧。

一、Cas ticket两种验证方式

本以为cas源码中提供的仅一种方式,于是乎想一探究竟,居然发现了多种。
cas ticke验证方式大体上讲有2个体系:

  • AbstractTicketValidationFilter,基于Filter的ticket的验证;
  • AbstractUrlBasedTicketValidator,基于TicketValidator的验证;

1-1 基于TicketValidator

有几个实现类

  • Cas20ServiceTicketValidator
  • Cas20ProxyTicketValidator
  • 等等

接下来看一下Cas20ServiceTicketValidator类图:

在这里插入图片描述

AbstractUrlBasedTicketValidator中有个validate方法:

    public Assertion validate(final String ticket, final String service) throws TicketValidationException {
   
   


        final String validationUrl = constructValidationUrl(ticket, service);
        if (log.isDebugEnabled()) {
   
   
            log.debug("Constructing validation url: " + validationUrl);
        }

        try {
   
   
        	log.debug("Retrieving response from server.");
            //从后端访问cas Server验证st的有效性
            final String serverResponse = retrieveResponseFromServer(new URL(validationUrl), ticket);

            if (serverResponse == null) {
   
   
                throw new TicketValidationException("The CAS server returned no response.");
            }
            
            if (log.isDebugEnabled()) {
   
   
            	log.debug("Server response: " + serverResponse);
            }
			//根据服务端的返回信息解析用户数据
            return parseResponseFromServer(serverResponse);
        } catch (final MalformedURLException e) {
   
   
            throw new TicketValidationException(e);
        }
    }

org.jasig.cas.client.validation.Cas20ServiceTicketValidator#parseResponseFromServer

    protected final Assertion parseResponseFromServer(
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

子涵先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值