zoukankan      html  css  js  c++  java
  • 在Tomcat上配置CAS 自己的体验

    演示环境

    本文演示过程在同一个机器上的(也可以在三台实体机器或者三个的虚拟机上),环境如下:

    • windows732位
    • JDK 1.6.0_18
    • Tomcat 6.0.29
    • CAS-server-3.4.11、CAS-client-3.2.1

    根据演示需求,用修改hosts 文件的方法添加域名,在文件 C:WindowsSystem32driversetchosts 文件中添加三条

    127.0.0.1    localhost1

    127.0.0.1    localhost2

    127.0.0.1    sunhan(这个在生成证书的时候用的上,由于一开始不知道就随便写了,后来才知道这个地方后面要用的到)

    sunhan  =>>对应部署cas server的tomcat,这个虚拟域名还用于证书生成

    localhost1 =>>  对应部署app1的tomcat

    localhost2   =>>对应部署app2的tomcat

     

    生成证书

    在C盘根目录下建立子文件夹“Keys”,用于存放证书。

    单击“开始 -> 运行",输入“cmd”,单击“确定”启动命令提示符窗口。

    输入“cd "c:Program FilesJavajre7in"”进入jre7的bin目录下。

    执行命令“keytool -genkey -alias tomcat -keyalg RSA -storepass changeit -keystore F:SSOkeys.keystore -validity 3600”创建证书。如图:

    image

    注:1.要提前建好目录:F:SSOkeys

    2.changeit 就是你要的密码,在后续的配置文件中会用到这个。

    3.sunhan 此处就是当作服务器端域名

    image

    将证书导入的JDK的证书信任库中

    第一步:导出证书。

    执行命令“keytool -export -trustcacerts -alias tomcat -file F:SSOkeys omcat.cer -keystore F:SSOkeys.keystore -storepass changeit”将证书导出到Keys文件夹。

    第二步:将证书导入到JDK证书信任库。

    执行命令“keytool -import -trustcacerts -alias tomcat -file F:SSOkeys omcat.cer -keystore "C:Program FilesJavajre7libsecuritycacerts" -storepass changeit”。系统询问是否信任此证书,回答“y”。

    image

    注:想我,可能测试两边的,他会提示证书已经存在,请用下面第二个方法进行证书删除

    其他有用keytool命令(列出信任证书库中所有已有证书,删除库中某个证书):

    keytool -list -v -keystore "C:Program FilesJavajre7libsecuritycacerts"

    keytool -delete -trustcacerts -alias tomcat -keystore "C:Program FilesJavajre7libsecuritycacerts" -storepass changeit

    配置server.xml文件

    以管理员身份运行文字编辑器,打开%TOMCAT_HOME%confserver.xml。查找SSL配置并将如下内容插入其中。

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true" 
                   maxThreads="150" scheme="https" secure="true" 
                   clientAuth="false" sslProtocol="TLS" 
                   keystoreFile="F:/SSO/keys/.keystore" 
                   keystorePass="changeit" />

     

    然后启动该路径下的tomcat ,分别测试“http://demo:8080”和“https://demo:8443/”

    image

     

    安装 CAS

    解压缩下载下来的“cas-server-3.5.1-release.zip”,

    在“modules”文件夹中找到“cas-server-webapp-3.5.1.war”,将其重命名为“cas.war”

    将“cas.war”拷贝到“%TOMCAT_HOME%webapps”(这里要注意一下,我是没有设置这个环境变量的,为了测试SSO,用的新建的tomcat的)文件夹下。稍等一会儿刷新一下,就会看到Tomcat自动将“cas.war”解压到“cas”文件夹中。如下图:

    image

    测试 CAS

    在默认配置下,CAS认为只要用户名密码相同即登录成功。我们可以通过修改配置以实现基于数据库的身份验证。不过目前我们先以默认配置进行测试。

    在浏览器中输入网址“https://demo:8443/cas/login”,如果IE有证书警告信息,直接点击“继续浏览此网站(不推荐)。

    image

    如果用户名与密码相同,则系统显示登录成功:

    image

    部署CAS-Client相关的Tomcat

    Cas-Client下载

    CAS-Client下载地址:http://downloads.jasig.org/cas-clients/

    以cas-client-3.2.1-release.zip为例,解压提取cas-client-3.2.1/modules/cas-client-core-3.2.1.jar

    借以tomcat默认自带的webappsexamples 作为演示的简单web项目

    安装配置tomcat-app1

    解压apache-tomcat-6.0.29.tar.gz并重命名后的路径为F:SSO omcat1,修改tomcat的启动端口(共计5处),在文件conf/server.xml文件找到如下内容:

    <Serverport="8005" shutdown="SHUTDOWN">
    
    <Connectorport="8080" protocol="HTTP/1.1"
    
      connectionTimeout="20000"
    
      redirectPort="8443" />
    
    <Connectorport="8009" protocol="AJP/1.3"redirectPort="8443" />

    修改成如下:

    <Serverport="18005" shutdown="SHUTDOWN">
    
    <Connectorport="18080" protocol="HTTP/1.1"
    
      connectionTimeout="20000"
    
      redirectPort="18443" />
    
    <Connectorport="18009" protocol="AJP/1.3"redirectPort="18443" />

    启动tomcat1,浏览器输入http://localhost1:18080/examples/servlets/回车:

    接下来复制client的lib包cas-client-core-3.2.1.jar和commons-logging-1.1.jar到 tomcat1webappsexamplesWEB-INFlib目录下,在tomcat1webappsexamplesWEB-INFweb.xml 文件中增加如下内容:

        <!-- ======================== 单点登录开始 ======================== -->
        <!-- 用于单点退出,该过滤器用于实现单点登出功能,可选配置 -->
        <listener>
            <listener-class>org.jasig.cas.cl"F:/SSO/tomcat1/webapps/examples/WEB-INF/web.xml"ient.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>https://localhost:8443/cas/login</param-value>
                <!--这里的server是服务端的IP -->
            </init-param>
            <init-param>
                <param-name>serverName</param-name>
                <param-value>https://localhost:8443</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://localhost:8443/cas</param-value>
            </init-param>
            <init-param>
                <param-name>serverName</param-name>
                <param-value>https://localhost:8443</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>
    
        
        <!-- ======================== 单点登录结束 ======================== -->

    有关cas-client的web.xml修改的详细说明见官网介绍:

    https://wiki.jasig.org/display/CASC/Configuring+the+Jasig+CAS+Client+for+Java+in+the+web.xml

    同样的方式部署一个tomcat2

    七、 测试验证SSO

    启动之前配置好的三个tomcat分别为:tomcat-cas、tomcat-app1、tomcat-app2.

    7.1 基本的测试

    预期流程:打开app1 url —->跳转cas server验证 —->显示app1的应用 —->打开app2 url —->显示app2应用 —->注销cas server —->打开app1/app2url —->重新跳转到cas server验证.

    打开浏览器地址栏中输入:http://localhost:18080/examples/servlets/servlet/HelloWorldExample

    这里要注意一点:服务器端的jdk 和 客户端的jdk要指定不同的

    本文所有知识都是通过一下博客获取。再次感谢他

    http://www.micmiu.com/lang/java/keytool-start-guide/

  • 相关阅读:
    清除陷入CLOSE_WAIT的进程
    Eclipse
    远程连接elasticsearch遇到的问题
    Linux环境Nginx安装
    CentOS安装mysql
    py2exe使用方法
    Python3.4如何读写Excel
    getPhysicalNumberOfCells 与 getLastCellNum的区别
    浅析MySQL中exists与in的使用
    【MongoDB for Java】Java操作MongoDB
  • 原文地址:https://www.cnblogs.com/sunhan/p/3808011.html
Copyright © 2011-2022 走看看