`
mengyang
  • 浏览: 267279 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

CasClient3.1过滤器分析

    博客分类:
  • SSO
阅读更多
    本篇文章将讨论CasClient的两个过滤器AuthenticationFilter和TicketValidationFilter 。这两个过滤器将按先后顺序配置在需要使用到SSO的应用服务中。
    一.AuthenticationFilter
    这个过滤器判断用户是否已登录,若没有,则重定向到CasServer。
    主要的业务逻辑都在doFilter方法,里面有几个变量注意下:
    assertion:代表了一个验证请求的响应,里面封装了验证时间,验证主体(Principal)等信息。
    ticket:代表了访问一个应用服务所需的票据。
    wasGatewayed:不明白具体的意义,只知道是根据保存在session中的一个属性值来判断的一个boolean类型的值,当用户初次访问应用服务并且未登录的时候为false,在casclient重定向到casserver时,若过滤器的gateway参数为true的时候,会设置对应session中的属性值,这样在第二次经过这个过滤器的时候就会为true了。而当从这个过滤器到下一个过滤器之前,又会清空session中对应的属性值,这样在第三次经过这个过滤器的时候又为false了~~
    这个过滤器的基本流程如下图所示:

    二.TicketValidationFilter
    这个过滤器是用来转发验证浏览器传来的Ticket的。Cas中实际上是没有这个类的,但是有几个备选的实现类:Cas10TicketValidationFilter,Saml11TicketValidationFilter,Cas20ProxyReceivingTicketValidationFilter。它们分别对应了不同的协议,这里我们也不管这些具体的实现类,我们看它们的共有的父类:AbstractTicketValidationFilter,在这个类的doFilter方法中会先调用一个preFiilter方法,这个方法我们除了Cas20ProxyReceivingTicketValidationFilter有具体的实现外,其他两个都是空实现。我们先认为这个方法都返回true。这个过滤器的基本流程如下图所示:


    看完了这两个过滤器的实现,我们最后看下,一个用户请求从未登录状态访问A应用的页面,被重定向到到CasServer登录,接着访问其他的页面,然后再访问B应用的页面会如何经过这两个过滤器。
分享到:
评论

相关推荐

    cas client

    它提供了配置和过滤器,用于拦截请求并重定向到CAS服务器进行身份验证。 2. 配置文件:在Spring Boot项目中,通常会有一个`application.properties`或`application.yml`文件,用于配置CAS客户端的相关参数,如CAS...

    cas-client-java-2.1.1

    3. **拦截请求**:在Web应用中设置过滤器,如`CasAuthenticationFilter`,来拦截并处理所有需要认证的请求。 4. **处理响应**:配置`CasValidationFilter`和`CasAssertionThreadLocalBinder`来验证从CAS服务器返回...

    统一身份认证对外文档

    3. **自定义过滤器**:开发自定义的过滤器来处理CAS返回的票据,并根据票据进行下一步的操作。 综上所述,统一身份认证系统的集成涉及到多个方面的配置和技术细节,包括但不限于JAR包的导入、`web.xml` 的配置修改...

    SpringSecurity 3.0.1.RELEASE.CHM

    7.4. 使用其他过滤器 —— 基于框架 8. 核心安全过滤器 8.1. FilterSecurityInterceptor 8.2. ExceptionTranslationFilter 8.2.1. AuthenticationEntryPoint 8.2.2. AccessDeniedHandler 8.3. ...

    Spring Security 3.0.1 pdf 中文参考文档

    - **CAS (spring-security-cas-client.jar):** 集成 CAS 单点登录系统的客户端。 - **OpenID (spring-security-openid.jar):** 支持 OpenID 身份验证。 **1.4.2 获取源代码** - **途径:** 可以从 GitHub 或者 ...

Global site tag (gtag.js) - Google Analytics