CASSSO AuthenticationFilter说明

开源的CAS已经很多牛人分析过了,最近在看源码,也总结一下

AuthenticationFilter.java主要代码

/**

* 这里用到了责任链模式,filterChain里面包含了web.xml里面配置的所有Filter,每次执行filterChain的doFilter()时,会执行下一个Filter的doFilter方法

* 可以查看ApplicationFilterChain的源码http://javapolo.iteye.com/blog/1287747

*/

public final void doFilter(final ServletRequest servletRequest, final ServletResponse servletResponse, final FilterChain filterChain) throws IOException, ServletException {

final HttpServletRequest request = (HttpServletRequest) servletRequest;

final HttpServletResponse response = (HttpServletResponse) servletResponse;

final HttpSession session = request.getSession(false);

//assertion的值会一直为空,因为一直都执行不到this.gatewayStorage.storeGatewayInformation(request, serviceUrl)

//只有在web.xml里面配置了gateway属性为ture,才会执行到

//什么时候才要配置gateway为true?

final Assertion assertion = session != null ? (Assertion) session.getAttribute(CONST_CAS_ASSERTION) : null;

if (assertion != null) {

filterChain.doFilter(request, response);

return;

}

//从request中构造服务URL

final String serviceUrl = constructServiceUrl(request, response);

/**

* getArtifactParameterName()的值是在AbstractCasFilter初始化时执行setArtifactParameterName()时赋的值,我们在web.xml中没有配置,所以默认是“ticket”

* safeGetParameter(request,getArtifactParameterName())会从request的请求链接中返回参数“ticket”的值

*/

final String ticket = CommonUtils.safeGetParameter(request,getArtifactParameterName());

//判断request的session里面是否有CONST_CAS_GATEWAY属性,如果有,则从session里面清除这个属性,并return true;

//这段代码的作用?

final boolean wasGatewayed = this.gatewayStorage.hasGatewayedAlready(request, serviceUrl);

if (CommonUtils.isNotBlank(ticket) || wasGatewayed) {

filterChain.doFilter(request, response);

return;

}

final String modifiedServiceUrl;

log.debug("no ticket and no assertion found");

//这个值在web.xml中没有配置,所以为false

if (this.gateway) {

log.debug("setting gateway attribute in session");

modifiedServiceUrl = this.gatewayStorage.storeGatewayInformation(request, serviceUrl);

} else {

modifiedServiceUrl = serviceUrl;

}

if (log.isDebugEnabled()) {

log.debug("Constructed service url: " + modifiedServiceUrl);

}

//根据参数构造重定向URL,URL为登陆界面,并把当前访问的路径作为参数拼加到URL之后

final String urlToRedirectTo = CommonUtils.constructRedirectUrl(this.casServerLoginUrl, getServiceParameterName(), modifiedServiceUrl, this.renew, this.gateway);

if (log.isDebugEnabled()) {

log.debug("redirecting to \"" + urlToRedirectTo + "\"");

}

//重定向到服务器端

response.sendRedirect(urlToRedirectTo);

}

时间: 2024-10-12 15:36:02

CASSSO AuthenticationFilter说明的相关文章

自定义cas客户端核心过滤器authenticationFilter

自定义cas客户端核心过滤器AuthenticationFilter 关于cas客户端的基本配置这里就不多说了,不清楚的可以参考上一篇博文:配置简单cas客户端.这里是关于cas客户端实现动态配置认证需要开发说明. 往往业务系统中有些模块或功能是可以不需要登录就可以访问的,但是添加了cas客户端之后,通过cas客户端filter中的url-pattern来设置需要过滤的url,有时根本无法满足实际业务的需求,这里笔者就通过对cas客户端中源码的阅读,和对认证流程的理解,对cas客户端做了些改动,

cas_client之AuthenticationFilter源码分析

packageorg.jasig.cas.client.authentication; import java.io.IOException; import java.io.PrintStream; import java.util.Date; import java.util.HashMap; import java.util.Map; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import jav

CAS源码追踪系列二:AuthenticationFilter对于请求的处理

上一篇我们说了在web项目中了和spring整合之后,如何进行对应Filter的初始化,如果你还没看过,请点击 <CAS源码追踪系列一:Filter的初始化>. 本篇我们来看看在初始化完成以后,cas-client是如何处理请求的. 源码地址:https://github.com/apereo/java-cas-client 如何你还不太清楚sso的原理,你可以看看这篇文章<单点登录原理与简单实现>. 当访问系统受保护的资源时,cas的过滤器AuthenticationFilter

javaweb学习笔记(二)

<p>练习好多天了,还是不会用博客编辑器,原谅我!!</p> 组织每天监督,今天学习的是filter过滤器 在很多国内博客里找不到具体的实例,所以到外国网站上找了一个来练习 利用filter实现了登陆页面验证功能 没有很多的文字叙述,我打算周末补充心得,每天下班找代码,敲代码.重要的事说三遍(总结:总结:总结:) 一定要会总结,不然一天都白费了 AuthenticationFilter.java package com.journaldev.servlet.filters; imp

Shiro的 rememberMe 功能使用指导(为什么rememberMe设置了没作用?)

问题 shiro中提供了rememberMe功能,它用起来是这样的 [java] view plaincopy UsernamePasswordToken token = new UsernamePasswordToken(loginForm.getUsername(),loginForm.getPassword()); if(loginForm.getRememberMe() != null && "Y".equals(loginForm.getRememberMe(

java.lang.ClassNotFoundException: org.jaxen.JaxenException

java.lang.ClassNotFoundException: org.jaxen.util.FollowingSiblingAxisIterator 具体错误信息 严重: Servlet.service() for servlet [springmvc] in context with path [/xinghe-platform-web] threw exception [Handler processing failed; nested exception is java.lang.N

CAS 4.0 单点登录教程

CAS 单点登录指导文档 1.概述 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. 耶鲁大学(yale)开发的单点登录(Single Sign On)系统称为CAS(Central Authentication Service)被设计成一个独立的Web应用程序(cas.war). CAS在2004年12月成为Jasig项目,所以也叫JA-SIG CAS. 本

2、cas4.0 单点登录 之 cas-client

cas4.0 单点登录 之 cas-client cas4.0 单点登录 之 https证书已经做好了证书的准备工作,现在结合cas-server来配置单点登录: 一.安装cas服务端(cas-server) cas服务端是一个war包,这里只做体验单点登录,cas-server下载点这里cas-server-webapp-4.0.0.war,将war包放tomcat下运行即可,运行cas-server的tomcat的要开启SSL支持,上面文章也有说明,server.xml需要如下配置: <Co

ASP.NET WebAPI 13 Filter

Filter(筛选器)是基于AOP(面向方面编程)的设计,它的作用是Actionr的执行注入额外的逻辑,以达到横切注入的目的. IFilter 在WebAPI中所以的Filter都实现了IFilter接口 ,IFilter接口只有一个只读属性AllowMultiple,它表示同类的Filter是否可以应用到同一目标对象上. public interface IFilter { bool AllowMultiple { get; } } FilterInfo 在HttpActionDescript