1.下载CAS server与CAS client
下载地址:
http://downloads.jasig.org/cas/cas-server-4.0.0-release.zip
http://downloads.jasig.org/cas-clients/cas-client-3.2.1-release.zip
2.部署CAS server
a.将下载的cas-server-4.0.0-release.zip解压,把cas-server-4.0.0/modules/cas-server-webapp-4.0.0.war拷贝到 tomcat的webapps目录,并更名为cas.war。
b.修改cas\WEB-INF\spring-configuration\ticketGrantingTicketCookieGenerator.xml文件,将属性p:cookieSecure="true" 变成 p:cookieSecure="false"(这个设置主要是让CAS不走SSL协议)
c.启动tomcat,然后访问:http://localhost:8888/cas,如果能出现如下图所示的CAS登录页面,则说明CAS Server 已经部署成功。
3.配置客户端
这里的例子是从零配置客户端,如果是将已有项目改造为client,也是类似操作。
a.首先新建一个web project,项目名为cas_client
b.将cas-client-3.2.1/modules/cas-client-core-3.2.1.jar拷贝到项目的lib目录下
c.将下面的内容新增到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>CASFilter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<init-param>
<param-name>casServerLoginUrl</param-name>
<param-value>http://localhost:8080/cas/login</param-value><!-- cas 服务器登录 地址 http://IP:PORT/CasWebProName/login -->
</init-param>
<init-param>
<!-- 这里的server是服务端的IP -->
<param-name>serverName</param-name>
<param-value>http://localhost:8080</param-value><!-- 客户端服务器地址 http://IP:PORT -->
</init-param>
</filter>
<filter-mapping>
<filter-name>CASFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 该过滤器负责对Ticket的校验工作,必须启用它 -->
<filter>
<filter-name>CAS Validation Filter</filter-name>
<filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
<init-param>
<param-name>casServerUrlPrefix</param-name>
<param-value>http://localhost:8080/cas</param-value><!-- cas 服务器地址 http://IP:PORT/CasWebProName -->
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://localhost:8080</param-value><!-- 客户端服务器地址 http://IP:PORT -->
</init-param>
</filter>
<filter-mapping>
<filter-name>CAS Validation Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 该过滤器负责实现HttpServletRequest请求的包裹, 比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。 -->
<filter>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。 比如AssertionHolder.getAssertion().getPrincipal().getName()。 -->
<filter>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- ======================== 单点登录结束 ======================== -->
d.将index.jsp按如下修改,通过AttributePrincipal获取用户名(默认情况下,登陆成功后CAS server只会讲用户名传给客户端)
<%@ page language="java" import="java.util.*,org.jasig.cas.client.authentication.AttributePrincipal" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();
String username = principal.getName();
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
</head>
<body>
welcome <%=username %> <br>
</body>
</html>
e.启动tomcat,如果报异常,可能是缺少commons-logging-xx.jar ,将对应的jar包添加到lib下,xx代表版本号,我的为1.1.1
f.正常运行后,浏览器输入localhost:8080/cas_client,如果页面重定向到上面的cas登陆页面,则表示客户端配置成功,且地址栏里的地址为:
正如上一篇文章所说,service后指向的路径为登陆成功后页面的跳转地址
g.用户名密码分别输入:casuser与Mellon。
在CAS server中,用户名密码默认是写死的,在webapps\cas\WEB-INF下的deployerConfigContext.xml中进行了设置。
h.登录成功后,页面会跳转到index.jsp页面,并显示用户名。
i.此时再访问localhost:8080/cas 会出现如下页面:
----------------------------------------------------------------------------------------------------
这样就实现了简单的服务端部署与客户端配置,后续还需要进行服务端登录页的改造,将固定的用户名密码改为从数据库查询等操作。