该认证方式基于“智教中国通行证”为各类平台提供统一登录入口,实现一地登录,全网漫游,当用户同时访问多个不同平台时,只需要提供一次自身的凭证信息,即可访问所授权的不同业务系统。该认证方式依托服务枢纽的身份认证服务和基础数据服务,接入的平台可专注于自身的业务扩展,无需关注基础数据的管理和用户认证服务,业务所需的基础数据均来自于服务枢纽,用户的认证使用服务枢纽统一的身份认证入口。
目标:统一单点登录主要适用于接入到国家智慧教育平台的各类平台,依赖“智教中国通行证”进行单点登录。
特点:平台不需要自己的登录界面,直接使用枢纽提供的统一登录界面。
3、开发规范
说明:以下给出的配置是通用的客户端配置Demo,只适合跳转地址固定的场景(即serverName对应的value是固定的)。如有其他特殊需求,需客户端程序自己实现。
1. 先把cas-client-core-3.3.3.jar引入到项目的工程中(一般是lib)目录。
2. 在项目web.xml文件添加以下内容。
<!-- 过滤器负责用户的认证工作,必须启用它 -->
<filter>
<filter-name>SSOFilter</filter-name>
<filter-class>
com.whty.aam.client.authentication.AuthenticationFilter
</filter-class>
<init-param>
<param-name>casServerLoginUrl</param-name>
<param-value><!—此处配置用户登录的地址-->
http://ip:port/sso/login
</param-value>
<!--这里的server是服务端的IP-->
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://ip:port</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SSOFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 以下配置的过滤器负责对Ticket的校验工作,必须启用它 -->
<filter>
<filter-name>vlidationFilter</filter-name>
<filter-class>
org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter
</filter-class>
<init-param>
<param-name>casServerUrlPrefix</param-name>
<param-value> http://ip:port/url </param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://ip:port</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>vlidationFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 用于单点退出配置,通知其他应用单点登出-->
<listener>
<listener-class>
org.jasig.cas.client.session.SingleSignOutHttpSessionListener
</listener-class>
</listener>
<!-- 该过滤器用于实现单点登出功能,可选配置。 -->
<filter>
<filter-name> SingleSignOutFilter</filter-name>
<filter-class>
org.jasig.cas.client.session.SingleSignOutFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>SingleSignOutFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--
该过滤器负责实现HttpServletRequest请求的包裹,
比如允许服务商通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。
-->
<filter>
<filter-name>httpServletRequestWrapperFilter</filter-name>
<filter-class>
org.jasig.cas.client.util.HttpServletRequestWrapperFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>httpServletRequestWrapperFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>AssertionThreadLocalFilter</filter-name>
<filter-class>
org.jasig.cas.client.util.AssertionThreadLocalFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>AssertionThreadLocalFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3. 取得用户的usessionId
AttributePrincipal principal = (AttributePrincipal)request.getUserPrincipal();
Map<String,Object> userMap = principal.getAttributes();
String userId=(String)userMap.get("userId");//用户主键Id
String name=(String)userMap.get("name");//用户姓名
String usessionId=(String)userMap.get("usessionId");//用户登录会话Id
请参考该文档https://wiki.jasig.org/display/CASC/Home