搭建CAS单点登录服务器

简介:   最近公司的一个项目需要用到单点登录的功能,之前对单点登录了解得不多。于是网上找了下单点登录的解决方案,发现CAS是个不错的解决方案。于是搭个环境测试了一下。这里记录下测试的详细步骤。   官网:http://jasig.

  最近公司的一个项目需要用到单点登录的功能,之前对单点登录了解得不多。于是网上找了下单点登录的解决方案,发现CAS是个不错的解决方案。于是搭个环境测试了一下。这里记录下测试的详细步骤。

  官网:http://jasig.github.io/cas/

  Cas Server下载:http://developer.jasig.org/cas/

  Cas Client下载:http://developer.jasig.org/cas-clients/

  测试环境:

    jdk:java version "1.8.0_60"

    tomcat:apache-tomcat-7.0.65

    mysql:mysql5.5.40

    CAS Server:cas-server-4.0.0-release.zip

    CAS Client:cas-client-3.1.12-release.zip

  此教程是在jdk和tomcat成功安装的基础上完成,至于jdk和tomcat的安装大家可以网上找找资料。好吧,下面入正题。

  一、生成证书

  1、生成证书:

    keytool -genkey -alias castest -keyalg RSA -keystore F:/keys/castest

    生成一个别名为castest的证书。

    此处需要特别注意口令(后续导入导出证书、CAS服务器端均要用到此口类)和“名字与姓氏”(为CAS跳转域名,否则会报错)

    

  2、导出证书:

    keytool -export -file F:/keys/castest.crt -alias castest -keystore F:/keys/castest

  3、将证书导入到客户端JRE中(注意、是导入JRE中),如果security中已经存在cacerts,需要先将其删除。

    keytool -import -keystore "D:\Program Files\Java\jdk1.8.0_60\jre\lib\security\cacerts" -file F:/keys/castest.crt -alias castest

  二、配置服务器端

  1、从http://developer.jasig.org/cas/上下载cas服务器端cas-server-4.0.0-release.zip,在modules目录下找到cas-server-webapp-4.0.0.war,将其复制到%TOMCAT_HOME%\webapps下,并将名称改为cas.war

  2、修改%TOMCAT_HOME%\conf\server.xml文件,去掉此文件83到93行之间的注释,修改为:

<Connector SSLEnabled="true" clientAuth="false" keystoreFile="F:/keys/castest" <!—生成证书时的路径,证书名-->
keystorePass="castest" <!—证书密码-->
maxThreads="150" port="8443" protocol="org.apache.coyote.http11.Http11Protocol" scheme="https" secure="true" sslProtocol="TLS"/>

  3、测试:https://localhost:8443/

  

  点击继续浏览此网页

  

  如果此时可以正常访问,说明证书安装成功

  https://localhost:8443/cas/login,出现

  

  输入账号和密码

  casuser
  Mellon

  

  此时说明服务器端已经配置成功。可通过https://localhost:8443/cas/logout退出登录

  三、配置客户端

  1. 从http://developer.jasig.org/cas-clients/上下载cas-client-3.1.12-release.zip,在modules目录下找到cas-client-core-3.1.12.jar、commons-collections-3.2.jar、commons-logging-1.1.jar复制到项目WEB-INF/lib下

  2. 添加映射域名,在C:\Windows\System32\drivers\etc\hosts文件中添加

    127.0.0.1 sso.castest.com
  3. 创建web项目CasClient,并在项目的web.xml配置过滤器

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

        <display-name>cas-demo</display-name>
        
        <!-- ======================== 单点登录开始 ======================== -->
        <!-- 用于单点退出,该过滤器用于实现单点登出功能,可选配置-->
        <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>/CasClient/*</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>https://sso.castest.com:8443/cas/login</param-value>
                        <!--这里的server是服务端的IP-->
                </init-param>
                <init-param>
                        <param-name>serverName</param-name>
                        <param-value>http://localhost:8080</param-value>
                </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>https://sso.castest.com:8443/cas/</param-value><!-- 此处必须为登录url/cas/,带有任何其它路径都会报错,如“https://sso.castest.com:8443/cas/login”,这样也会报错。 -->
                </init-param>
                <init-param>
                        <param-name>serverName</param-name>
                        <param-value>http://localhost:8080</param-value>
                </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>
        
        <!-- ======================== 单点登录结束 ======================== -->

        <!-- session超时定义,单位为分钟 -->
        <session-config>
                <session-timeout>2</session-timeout>
        </session-config>

</web-app>

  4. 此时访问http://localhost:8080/CasClient/Index.jsp时会自动跳转到sso.castest.com下去登录

  

  输入账号和密码casuser:Mellon

  

  此时客户端已安装成功。

  可以用类似的方式新建多个站点,站点1登录以后站点而无需登录也可访问,如果未登录则会跳转到相应的url进行登录验证。

  至此,简单的服务器搭建已经完成了。然而,此时用户的验证是通过配置文件cas\WEB-INF\deployerConfigContext.xml中指定用户名和密码的方式进行验证的。显然这不满足我们日常的需求,今天先介绍到这。下面再另行介绍通过mysql数据库验证的方式。

相关文章
|
8天前
|
Java 关系型数据库 MySQL
阿里云服务器Linux系统部署JavaWeb项目
阿里云服务器Linux系统部署JavaWeb项目
|
8月前
|
应用服务中间件
五分钟初步了解CAS单点登录
五分钟初步了解CAS单点登录
107 0
五分钟初步了解CAS单点登录
|
10月前
|
NoSQL 关系型数据库 MySQL
阿里云服务器部署图文详解
阿里云服务器部署图文详解
阿里云服务器部署图文详解
|
11月前
|
消息中间件 JavaScript 小程序
废物利用,拿自己的旧电脑搭建个服务器吧!
废物利用,拿自己的旧电脑搭建个服务器吧!
|
NoSQL JavaScript 应用服务中间件
ColyseusJS 轻量级多人游戏服务器开发框架 - 中文手册(系统保障篇)
ColyseusJS 轻量级多人游戏服务器开发框架 - 中文手册(系统保障篇)
471 0
ColyseusJS 轻量级多人游戏服务器开发框架 - 中文手册(系统保障篇)
|
弹性计算 关系型数据库 MySQL
初次使用云服务器部署SSM项目
将已编写完成的SSM项目从本地部署到服务器的过程
初次使用云服务器部署SSM项目
|
分布式计算 Java Hadoop
服务器的搭建
服务器的运行需要环境的完整存在,我们就需要选择选择镜像源,和下载所需要组件,以此来搭建Hadoop,需要下载对应版本的镜像组件,利用linux命令来配置文件,以此来实现组件的使用,但这个过程中难免会出现问题,所以对此有了下文中所描述的。
146 0
|
弹性计算 小程序 安全
基于云服务器部署nginx开发环境(新同学搭建Web系统/博客网站)
大家好,今天为大讲解如何搭建自己的和通数据库服务环境,也是笔者踩坑一天所获,希望对大家有所帮助。 无论是搭建个人博客空间也好,小程序也罢,搭建环境必需的两点:云服务器、域名,下面一步步给搭建演示如果在一台和通数据库服务器上搭建小程序服务端环境。
927 0
基于云服务器部署nginx开发环境(新同学搭建Web系统/博客网站)
|
关系型数据库 MySQL 应用服务中间件
如何用阿里云搭建Web服务器
一、什么是服务器、云服务器     服务器:是一种高性能的计算机     云服务器:是一组集群服务器虚拟出类似独立服务器的部分,集群中每个服务器都有云服务器的一个镜像,从而大大提高了云服务器的稳定性。
4881 0
|
Web App开发 MySQL 关系型数据库
CAS单点登录方案
应用场景 当几个应用系统需要同一个入口时,那么此时就需要配置CAS统一单点登录了。 操作步骤 SSO实现有很多产品,我们今天选用的这个是耶鲁大学发明的CAS SSO服务器。
1595 0