【出版社直接提供】操作系统的精髓和第9版
91.6元
邮包邮件
((需要票) ) ) )。
去买
单点登录功能支持点登录功能,旨在使所有CAS客户端通过CAS服务器注销。
Cas Server注销是通过请求"/logout "发生的。 也就是说,在部署cas服务器的访问路径为“https://本地主机:8443/cas”的情况下,
访问https://localhost :8443/CAS/logout将触发CAS服务器注销操作,从而触发cas客户端注销。
当您请求cas服务器的logout时,cas服务器会删除客户端的TGC,同时回调与该TGT对应的所有服务或所有cas客户端。
如果cas客户端需要响应此回调并在cas客户端上执行进一步的注销操作,则需要相应的支持。
具体而言,必须将类似以下内容的过滤器和监听器添加到cas client APP应用程序的web.xml文件中:
CAS Single Sign Out Filter
org.ja SIG.cas.client.session.singlesignoutfilter
CAS Single Sign Out Filter
/*
org.ja SIG.cas.client.session.singlesignouthttpsessionlistener
让我们看看这两个类的源代码:
publicvoiddofilter (finalservletrequestservletrequest,finalservletresponse,final FilterChain filterChain ) )
finalhttpservletrequestrequest=(http servletrequest ) servlet request; 确定//参数是否具有在artifactParameterName属性中指定的参数名称,缺省为ticket
handler.istokenrequest (request ) /在本地sessionMappingStorage中记录session (如果存在)。
Handler.recordsession(request );
}确定是否存在由else if (handler.islogoutrequest (request ) ) logout参数名称参数指定的参数,缺省参数名称为logout request/request
Handler.destroysession(request ); 注销session后,立即停止执行后面的过滤器
返回;
}else{
log.trace (ignoring uri ' request.getrequest uri ) );
//由于不满足条件,继续执行下一个筛选器
filter chain.do filter (servlet request,servletResponse;
}
用户通过浏览器访问系统Awww.a.com/pageA。 这个pageA是为了访问需要登录的页面,系统a发现用户没有登录。 此时,系统a是否需要执行其他操作:重定向至认证中心:www.sso.com/login? service=www.a.com/pageA。
此service参数是验证完成后重定向到系统a的回跳url,另一个角色是注册服务。 简单来说,注册服务是为了让我们的认证中心知道哪个系统在我们这里完成了登录,其中一个重要的目的是完成单点退出的功能。
注册服务时,一个存储跃回服务地址,另一个存储相应的ticket。
拿着ticket回到客户端后,当客户端看到地址的请求参数中有ticket时,singleSignOutFilter将ticket作为id的session注册到sessionMappingStorage中
当用户需要访问并注销认证中心的/logout时,认证中心首先杀死TGT,然后向以前注册这些服务器的地址发送注销请求。 然后,携带以前登录的ticket,客户端看到请求中参数中有logoutRequest时,
客户端的singleSignOutFilter根据发送来的这个ticket杀死对应的用户session即可。
那么什么时候杀sessionMappingStorage呢? (sessionMappingStorage是map,key是ticket,value是session )
这由singlesignouthttpsessionlistener实现,它在取消注册session时触发从sessionMappingStorage中相应的sessionId中删除数据。
因此,在配置单点登录时,请确保配置此监听程序。 否则,客户端很容易发生内存溢出。
singlesignouthttpsessionlistener源代码:
//*
* listenertodetectwhenanhttpsessionisdestroyedandremoveitfromthemapof
* managed sessions.alsoallowsfortheprogrammaticremovalofsessions。
*
*启用成本优势。
*
* Scott Battaglia
* @version $Revision$ Date$
* @since 3.1*/
publicfinalclassinglesignouthttpsessionlistenerimplementshttpsessionlistener (finalhttpsessioneventevent ) {//nothing to do at the moment
} publicvoidsessiondestroyed (finalhttpsessioneventevent ) if (sessionmappingstorage==null ) )。
sessionmappingstorage=getsessionmappingstorage (;
}
finalhttpsessionsession=event.getsession (;
sssionmappingstorage.removebysessionbyid (session.getid () );
(/**
* obtainsa { @ linksessionmappingstorage } object.assumesthismethodwillalwaysreturnthesame
* instance of the object.itassumesthisbecauseitgenerallylazilycallsthemethod。
*
* @ returnthesessionmappingstorage * /
protectedstaticsessionmappingstoragegetsessionmappingstorage ((returnsinglesignoutfilter.getsinglesignouthandler ).g
}
}
原文链接:https://www.cn blogs.com/xiangkejin/p/8963089.html
java 11官方入门(第8版)教材
79.84元
邮包邮件
((需要票) ) )。
去买