欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

CAS单点登录(二)---非SSL协议 CAS服务端部署及客户端配置

程序员文章站 2022-05-05 09:59:49
...

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 已经部署成功。

CAS单点登录(二)---非SSL协议 CAS服务端部署及客户端配置


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登陆页面,则表示客户端配置成功,且地址栏里的地址为:

CAS单点登录(二)---非SSL协议 CAS服务端部署及客户端配置

正如上一篇文章所说,service后指向的路径为登陆成功后页面的跳转地址

g.用户名密码分别输入:casuser与Mellon。

在CAS server中,用户名密码默认是写死的,在webapps\cas\WEB-INF下的deployerConfigContext.xml中进行了设置。

h.登录成功后,页面会跳转到index.jsp页面,并显示用户名。

i.此时再访问localhost:8080/cas 会出现如下页面:

CAS单点登录(二)---非SSL协议 CAS服务端部署及客户端配置

----------------------------------------------------------------------------------------------------

这样就实现了简单的服务端部署与客户端配置,后续还需要进行服务端登录页的改造,将固定的用户名密码改为从数据库查询等操作。