CAS-Client客户端研究(五)-SingleSignOutFilter
2016-07-29 00:00
302 查看
最近研究CAS,先从客户开始来说明CAS的逻辑,可能会结合源代码。
必要说明:http://blog.csdn.net/yuwenruli/article/details/6602180
SingleSignOutFilter ,主要是在有ticket参数的时候,将session放到sessionMappingStorage,如果参数中存在logoutRequest,则注销session,大家可能要问了,那什么时候去注销sessionMappingStorage的东西呢?这是靠SingleSignOutHttpSessionListener来实现的,当有session被销毁的时候,触发将sessionMappingStorage中对应sessionid中的数据删除。所以在配置单点登出的时候,一定要配置这个监听器,否则客户端很容易导致内存溢出的。让我们先来看看SingleSignOutFilter 的整体逻辑。
那么这个是在什么时候会触发呢,这个是在你登陆的任意客户端,调用https://xxx:8443/logout,这个取得cookie里面的TGT数据,找到TGT中关联的所有ST对应的地址,向每个地址方式一个http请求,并传递logoutRequest参数。
我们来看看源代码是怎么实现的吧:
必要说明:http://blog.csdn.net/yuwenruli/article/details/6602180
SingleSignOutFilter ,主要是在有ticket参数的时候,将session放到sessionMappingStorage,如果参数中存在logoutRequest,则注销session,大家可能要问了,那什么时候去注销sessionMappingStorage的东西呢?这是靠SingleSignOutHttpSessionListener来实现的,当有session被销毁的时候,触发将sessionMappingStorage中对应sessionid中的数据删除。所以在配置单点登出的时候,一定要配置这个监听器,否则客户端很容易导致内存溢出的。让我们先来看看SingleSignOutFilter 的整体逻辑。
那么这个是在什么时候会触发呢,这个是在你登陆的任意客户端,调用https://xxx:8443/logout,这个取得cookie里面的TGT数据,找到TGT中关联的所有ST对应的地址,向每个地址方式一个http请求,并传递logoutRequest参数。
我们来看看源代码是怎么实现的吧:
public void doFilter(final ServletRequest servletRequest, final ServletResponse servletResponse, final FilterChain filterChain) throws IOException, ServletException { // 转换参数 final HttpServletRequest request = (HttpServletRequest) servletRequest; //判断参数中是否具有artifactParameterName属性指定的参数名称,默认是ticket if (handler.isTokenRequest(request)) { // 如果存在,在本地sessionMappingStorage中记录session。 handler.recordSession(request); } else if (handler.isLogoutRequest(request)) {//判断是否具有logoutParameterName参数指定的参数,默认参数名称为logoutRequest // 如果存在,则在sessionMappingStorage中删除记录,并注销session。 handler.destroySession(request); // 注销session后,立刻停止执行后面的过滤器 return; } else { log.trace("Ignoring URI " + request.getRequestURI()); } //条件都不满足,继续执行下面的过滤器 filterChain.doFilter(servletRequest, servletResponse); }
相关文章推荐
- CAS-Client客户端研究(五)-SingleSignOutFilter
- CAS-Client客户端研究(五)-SingleSignOutFilter
- CAS-Client客户端研究--SingleSignOutFilter
- 应用接入CAS后,org.jasig.cas.client.session.SingleSignOutFilter导致request.getInputStream()取不到的问题
- CAS-Client客户端研究--HttpServletRequestWrapperFilter
- CAS-Client客户端研究(四)-HttpServletRequestWrapperFilter
- CAS-Client客户端研究(六)-各种过滤器参数说明
- CAS-Client客户端研究--AuthenticationFilter
- CAS-Client客户端研究(一)-AuthenticationFilter
- CAS-Client客户端研究(四)-HttpServletRequestWrapperFilter
- CAS-Client客户端研究(四)-HttpServletRequestWrapperFilter
- CAS-Client客户端研究(三)-AssertionThreadLocalFilter
- CAS-Client客户端研究(三)-AssertionThreadLocalFilter
- CAS-Client客户端研究(六)-各种过滤器参数说明
- CAS-Client客户端研究(二)-Cas20ProxyReceivingTicketValidationFilter
- CAS-Client客户端研究(一)-AuthenticationFilter
- CAS-Client客户端研究(二)-Cas20ProxyReceivingTicketValidationFilter
- CAS-Client客户端研究--AssertionThreadLocalFilter
- CAS-Client客户端研究--Cas20ProxyReceivingTicketValidationFilter
- CAS-Client客户端研究(六)-各种过滤器参数说明