cas 客户端配置主要集中在web.xml中:
配置说明如下:
<!-- ======================== 单点登录开始======================== -->
<!--该监听器用于实现单点登出功能-->
<listener>
<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>
<!--该过滤器用于实现单点登出功能,可选配置。 这个过滤器要放到最前面,否则网站退出功能失效-->
<filter>
<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 Sign Out Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<!--配置登录过滤器,注意负责在登录时重定到服务器页面-->
<filter-name>CAS Authentication Filter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<init-param>
<!--到服务器地址,注意后面的/login-->
<param-name>casServerLoginUrl</param-name>
<param-value>http://127.0.0.1:8080/cas/login</param-value>
</init-param>
<init-param>
<!--本程序所在的URL-->
<param-name>serverName</param-name>
<param-value>127.0.0.1:8081</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CAS Authentication Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- ValidationFilter 这个filter负责对请求参数ticket进行验证(ticket参数是负责子系统与CAS进行验证交互的凭证)casServerUrlPrefix:CAS服务访问地址serverName:当前应用所在的主机名 -->
<filter>
<filter-name>CASValidationFilter</filter-name>
<filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
<init-param>
<param-name>casServerUrlPrefix</param-name>
<param-value>http://127.0.0.1:8080/cas</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://127.0.0.1:8081</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CASValidationFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 该过滤器负责实现HttpServletRequest请求的包裹,比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名-->
<filter>
<filter-name>CASHttpServletRequest WrapperFilter</filter-name>
<filter-class>
org.jasig.cas.client.util.HttpServletRequestWrapperFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>CASHttpServletRequest WrapperFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。比如AssertionHolder.getAssertion().getPrincipal().getName()。-->
<filter>
<filter-name>CASAssertion Thread LocalFilter</filter-name>
<filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CASAssertion Thread LocalFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- ======================== 单点登录结束 ======================== -->
使用到相关类结构的分析类的分析:
每个类源码的分析:
1.SingleSignOutHttpSessionListener:
继承于HttpSessionListener,通过监听session的销毁事件,来判断是否需要销毁sessionMappingStorage中的session对象。
2.SingleSignOutFilter:
通过SingleSignOutHandler对象来并处理解析捕获到的请求,如果是有带有票据的请求则session添加到sessionMappingStorage,如果为登出请求则删除sessionMappingStorage中的session
sessionMappingStorage
3.AuthenticationFilter:
如果session中何以获取到Assertion对象,或者请求中拥有票据的话则执行下一个过滤器,否则的话跳转到登陆界面。
4.Cas20ProxyReceivingTicketValidationFilter:
继承于Cas20ProxyReceivingTicketValidationFilter,主要逻辑在AbstractTicketValidationFilter中实现。如果请求中存在ticket参数则检验ticket并获取Assertion对象并将其放入request或session中。
其他几个类比较简单就不再解释了。