最近公司项目要使用CAS单点登录,了解了一下,保存下来。
CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。CAS 具有以下特点:
1、开源的企业级单点登录解决方案。
2、CAS Server 为需要独立部署的 Web 应用。
3、CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。
从结构上看,CAS 包含两个部分: CAS Server 和 CAS Client。CAS Server 需要独立部署,主要负责对用户的认证工作;CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。下图 是 CAS 最基本的协议过程:
下面是CAS客户端的配置:
1 <!-- CAS单点登录 --> 2 <filter> 3 <filter-name>CAS Authentication Filter</filter-name> 4 <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class> 5 <init-param> 6 <!-- CAS服务端登录地址 --> 7 <param-name>casServerLoginUrl</param-name> 8 <param-value>http://120.209.177.135:8082/cas</param-value> 9 </init-param> 10 <init-param> 11 <!-- 当前网站域名 --> 12 <param-name>serverName</param-name> 13 <param-value>http://localhost:8080</param-value> 14 </init-param> 15 </filter> 16 <filter-mapping> 17 <filter-name>CAS Authentication Filter</filter-name> 18 <url-pattern>/*</url-pattern> 19 </filter-mapping> 20 <!-- 该过滤器负责对Ticket的校验工作,必须启用它 --> 21 <filter> 22 <filter-name>CAS Validation Filter</filter-name> 23 <filter-class> 24 org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class> 25 <init-param> 26 <param-name>casServerUrlPrefix</param-name> 27 <param-value>http://120.209.177.135:8082/cas</param-value> 28 </init-param> 29 <init-param> 30 <param-name>serverName</param-name> 31 <param-value>http://localhost:8080</param-value> 32 </init-param> 33 </filter> 34 <filter-mapping> 35 <filter-name>CAS Validation Filter</filter-name> 36 <url-pattern>/*</url-pattern> 37 </filter-mapping> 38 <!-- 该过滤器负责实现HttpServletRequest请求的包裹, 比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。 --> 39 <filter> 40 <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name> 41 <filter-class> 42 org.jasig.cas.client.util.HttpServletRequestWrapperFilter 43 </filter-class> 44 </filter> 45 <filter-mapping> 46 <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name> 47 <url-pattern>/*</url-pattern> 48 </filter-mapping> 49 <!-- 该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。 比如AssertionHolder.getAssertion().getPrincipal().getName()。 --> 50 <filter> 51 <filter-name>CAS Assertion Thread Local Filter</filter-name> 52 <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class> 53 </filter> 54 <filter-mapping> 55 <filter-name>CAS Assertion Thread Local Filter</filter-name> 56 <url-pattern>/*</url-pattern> 57 </filter-mapping> 58 <!-- 自动根据单点登录的结果设置本系统的用户信息 --> 59 <!-- <filter> 60 <display-name>AutoSetUserAdapterFilter</display-name> 61 <filter-name>AutoSetUserAdapterFilter</filter-name> 62 <filter-class>com.huayun.monitor.filter.AutoSetUserAdapterFilter</filter-class> 63 </filter> 64 <filter-mapping> 65 <filter-name>AutoSetUserAdapterFilter</filter-name> 66 <url-pattern>/*</url-pattern> 67 </filter-mapping> --> 68 <!-- CAS单点登录 -->
要实现CAS单点登录还需要导入相应jar包(以我使用的CAS客户端版本为例):
cas-client-core-3.2.1.jar、commons-logging-1.1.jar、xercesImpl.jar
后两个jar包不是cas的,如果项目中已有,就不需导入了。