2016  
查询码: 00000043
CAS4.0 客户端测试环境的搭建
作者: 系统管理员 于 2019年12月23日 发布在分类 / 二次开发 / 接口服务 ,于 2019年12月23日 编辑

参考原文地址: https://www.cnblogs.com/duyinqiang/p/5696258.html

1 环境要求

环境如下:

  1. win8.1 64 bitJDK1.7  下载地址点我 Tomcat-8.0.15  下载地址点我 cas-server-4.0.0 、cas-client-3.3.3  下载地址点我   (官网速度比较慢,提供百度网盘)

2 特别说明

  CAS 默认认证方式使用的是HTTPS协议,一般对安全性不高的话建议取消改成HTTP方式。因为,开启的话会经常提示证书过期、需要用户确认等,对客户的感知不好,当前有需要的可以开启。

 如果需要HTTPS协议的话,有关证书的生成可以参考这篇文章 : CAS单点登录证书导入 

 取消HTTPS协议的方法,第四点会具体介绍,大家可以接着往下看!

3 实际操作

1 CAS-SERVER 服务端的部署

  1. 解压下载的 cas-server-4.0.0-release.zip 压缩包找到 X:\cas-server-4.0.0\modules\cas-server-webapp-4.0.0.war 文件解压到 tomcat-cas\webapps\ 下取消HTTPS协议:

1)打开 cas-server\WEB-INF\deployerConfigContext.xml 文件 ,找到如下配置:

 

 <bean id="proxyAuthenticationHandler" 
class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
          p:httpClient-ref="httpClient" />
增加参数p:requireSecure="false",是否需要安全验证,即HTTPS,false为不采用。修改后为:
  <bean id="proxyAuthenticationHandler" 
class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
          p:httpClient-ref="httpClient" p:requireSecure="false" />



2)打开 cas-server\WEB-INF\spring-configuration\ticketGrantingTicketCookieGenerator.xml ,找到如下配置:

 

<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
        p:cookieSecure="true"
        p:cookieMaxAge="-1"
        p:cookieName="CASTGC"
        p:cookiePath="/cas" />

修改  p:cookieSecure="true" 为 p:cookieSecure="false"
即不开启https验证



 3) 打开 cas-server\WEB-INF\spring-configuration\warnCookieGenerator.xml ,找到如下配置:

 

<bean id="warnCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
        p:cookieSecure="true"
        p:cookieMaxAge="-1"
        p:cookieName="CASPRIVACY"
        p:cookiePath="/cas" />

修改  p:cookieSecure="true" 为 p:cookieSecure="false"
即不开启https验证


 

5.启动 tomcat-cas ,访问  http://localhost:8080/cas-server ,可以看到如下界面

  

      粘贴图片

   注意:cas -server4.0之前的默认验证规则:只要用户名和密码相同就认证通过

  4.0 之后规则改了,默认是配置在 deployerConfigContext.xml 配置文件中,可以看到用户名密码为 casuser/Mellon。

<bean id="primaryAuthenticationHandler" class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler">
        <property name="users">
            <map>
                <entry key="casuser" value="Mellon"/>
            </map>
        </property>
</bean>


2客户端(cas-client)的配置

把下载到的cas-client导入到eclipse中

粘贴图片

粘贴图片

 

创建一个maven的web项目,修改web.xml


粘贴图片

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">
	<display-name>Archetype Created Web Application</display-name>
	<!-- ========================单点登录开始 ======================== -->
    <!--用于单点退出,该过滤器用于实现单点登出功能,可选配置 -->
    <listener>
        <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
    </listener>
    <!--该过滤器用于实现单点登出功能,可选配置。 -->
    <filter>
        <filter-name>CASSingle Sign OutFilter</filter-name>
        <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>CASSingle Sign OutFilter</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-server/login</param-value>
        </init-param>
        <init-param>
            <param-name>serverName</param-name>
            <param-value>http://localhost:8180</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CASFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!--该过滤器负责对Ticket的校验工作,必须启用它 -->
    <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://localhost:8080/cas-server</param-value>
        </init-param>
        <init-param>
            <param-name>serverName</param-name>
            <param-value>http://localhost:8180</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>
    <!-- ========================单点登录结束 ======================== -->
</web-app>

启动 客户端服务 ,然后访问 http://localhost:8180/casclient ,页面会跳到

http://localhost:8080/cas-server/login?service=http://localhost:8081/examples/

说明单点成功

3其他

1 注销用户

浏览器或CAS客户端向“登出URL”发起GET请求: 
“登出URL”:https://${cas-server-host}:${cas-server-port}/cas-server/logout

2 客户端项目中获得用户登陆名

 Java  中通过  Session  获取登录用户名

               

// 以下两者都可以

session.getAttribute(CASFilter.CAS_FILTER_USER);

session.getAttribute("edu.yale.its.tp.cas.client.filter.user");

通过  JSTL  获取登录用户名

               

<c:out value="${sessionScope[CAS:'edu.yale.its.tp.cas.client.filter.user']}"/>

通过  CASFilterRequestWrapper  获取登录用户名

               

CASFilterRequestWrapper  reqWrapper=new CASFilterRequestWrapper(request);

out.println("The logon user:" reqWrapper.getRemoteUser());

 

3 客户端DEMO代码下载

0人参与


 历史版本

备注 修改日期 修改人
格式调整 2019-12-23 22:13:58[当前版本] 系统管理员
创建版本 2019-12-23 22:09:05 系统管理员

 附件

附件类型

ZIPZIP PNGPNG

  目录
    wcp知识库系统-京ICP备15024440号-1 -V 5.2.0 -wcp