这里只给出核心代码 doFilter
首先要明确一点 SingleSignOutFilter 会拦截所有请求,而不是仅仅拦截logout时的请求
在sso client应用中存在一个Map<Ticket,HttpSession>对象
在sso server认证用户名密码成功后,会redirect一个带有ticket的请求到sso client
这时就执行下面的逻辑,ticket和当前session会被缓存到Map
退出时,sso server发送带logoutRequest参数的http请求到每一个sso client
这时就会执行下面的逻辑 --- 删除ticket对应的session 然后销毁session
public void doFilter(final ServletRequest servletRequest, final ServletResponse servletResponse, final FilterChain filterChain) throws IOException, ServletException {
final HttpServletRequest request = (HttpServletRequest) servletRequest;
//add for webdav sso
String reqURI = ((HttpServletRequest)request).getRequestURI();
boolean isCesso = false;
if(reqURI.endsWith("/webdav") || reqURI.contains("/webdav/")){
if(request.getHeader(WEBDAV_CESSO_FLAG)!=null
&& !request.getHeader(WEBDAV_CESSO_FLAG).equals(""))
isCesso = Boolean.valueOf(request.getHeader(WEBDAV_CESSO_FLAG).toString());
if(!isCesso){
filterChain.doFilter(servletRequest, servletResponse);
return;
}
}
//退出时,cas server向cas client发送post请求,其中包括了sessionId,此filter获取session并销毁之
if ("POST".equals(request.getMethod())) {
final String logoutRequest = request.getParameter("logoutRequest");
if (logoutRequest!=null && !"".equals(logoutRequest)) {
final String sessionIdentifier = XmlUtils.getTextForElement(logoutRequest, "SessionIndex");
if (!"".equals(sessionIdentifier)&& sessionIdentifier!=null) {
log.info(" client---Remove A Session Indentify : "+sessionIdentifier);
final HttpSession session = SESSIONSTORAGE.removeByMappingId(sessionIdentifier);
//首先注销本地session
request.getSession().invalidate();
log.info("client---invalidate request's Session");
if (session != null) {
session.invalidate();
}
return;
}
}
} else {
//非logout请求,判断是否包含ticket参数,如果包含缓存ticket session到map
String artifact = request.getParameter(this.artifactParameterName);
final HttpSession session = request.getSession();
if(null == artifact && null != session.getAttribute("ticket")){
artifact = (String)session.getAttribute("ticket");
}
if (!"".equals(artifact)&&!"null".equals(artifact) && artifact!=null
&& SESSIONSTORAGE.getSessionByMappingID(artifact)==null) {
log.info(" client---Add A New Session Indentify : "+artifact);
SESSIONSTORAGE.addSessionByMappingId(artifact, session);
}
}
filterChain.doFilter(servletRequest, servletResponse);
}
分享到:
相关推荐
<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 ...
NULL 博文链接:https://572327713.iteye.com/blog/2356519
NULL 博文链接:https://zgq456.iteye.com/blog/2192979
<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class> </filter> <filter-mapping> <filter-name>CAS Single Sign Out Filter</filter-name> <url-pattern>/* </filter-mapping> ...
CAS讲义SSO (Single Sign-on)原理
django-mama-cas, Django 中央身份验证服务( CAS ) 单点登录(Single Sign-On) 服务器 MamaCAS MamaCAS是 Django 中央认证服务( CAS ) 单一登录和单一注销服务器。 它实现了 CAS 1.0.2.0和 3.0协议,包括一些可选的...
- Support Single Sign Out - Configuration of services via the django Admin application - Fine control on which user's attributes are passed to which service - Possibility to rename/rewrite ...
单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 CAS 是 Yale 大学发起的一个开源项目...
SSO Single-Sign-on in Action cas
单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 CAS(Central Authentication ...
cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x...
CAS协议,包括cas1.0和cas2.0的协议,cas 协议分为两部分,一部分是票据-ticket,一部分是url。
H3C CAS 3.0版 H3C CAS 3.0产品培训胶片 H3C CAS-云计算管理平台技术白皮书V2.0 H3C CAS-云计算管理平台 安装指导-5W101-整本手册 H3C CAS-维护手册V2.0 H3C CAS-工程开局指导手册V2.0 H3C CAS-Rest API H3C ...
cas4.2.7服务端+cas客户端+示例程序+环境搭建之客户端war包 一切跑不起来的程序和走不通的教程都是耍流氓,二话不说,先按照我的步骤把程序跑起来在说吧。 请看博客...
自定义的单点登录系统,可返回各个子系统的登录页及支持CAS Server集群。(https://github.com/liyingqiao121727/single-sign-on-v2)
CAS在Tomcat中实现单点登录项目,单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。CAS...
cas4.2.7 实现其他系统和cas互相认证互信 cas4.2.7 实现其他系统和cas互相认证互信 cas4.2.7 实现其他系统和cas互相认证互信
包含cas源码、cas使用说明文档(包含配置信息)、连接数据库所需jar包、cas服务端自定义返回值等
单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。CAS(Central Authentication ...