CAS单点登录的环境搭建及使用

来源:互联网 发布:洞主的淘宝店 编辑:程序博客网 时间:2024/05/16 08:05

一.环境
        软件:jdk1.7、 tomcat7、 cas-server-3.4.11、cas-client-3.2.1
        系统环境:
            编辑C:\Windows\System32\drivers\etc\host文件,添加如下内容:

demo.wh.com  127.0.0.1app1.wh.com  127.0.0.1



二.证书配置
2.1.证书生成

keytool -genkey -alias ssodemo -keyalg RSA -keysize 1024 -keypass michaelpwd(密码) -validity 365 -keystore g:\sso\ssodemo.keystore(位置) -storepass michaelpwd(密码)

注意:

  • 截图中需要输入的姓名和上面hosts文件中配置的一致;
  • keypass 和 storepass 两个密码要一致,否则下面tomcat 配置https 访问失败;

这里写图片描述

2.2导出证书

keytool -export -alias ssodemo -keystore c:\sso\ssodemo.keystore(上一步的位置) -file c:\sso\ssodemo.crt -storepass michaelpwd(上一步的密码)

这里写图片描述

2.3客户端导出证书

keytool -import -keystore %JAVA_HOME%\jre\lib\security\cacerts -file c:\sso\ssodemo.crt -alias ssodemo(上面的名字)(输入的密码是changeit)

这里写图片描述



三.配置及验证
        解压apache-tomcat-7.0.73,修改conf/server.xml文件

<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"               clientAuth="false" sslProtocol="TLS" URIEncoding="UTF-8"/>

        修改如下:

<Connector port="38443" protocol="org.apache.coyote.http11.Http11Protocol"               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"               keystoreFile="c:/sso/sso.keystore" keystorePass="michaelpwd"(上面设定的密码)               clientAuth="false" sslProtocol="TLS" URIEncoding="UTF-8"/>

        访问https://demo.wh.com:8443,能出现tomcat官网界面则表示成功。



四.配置cas-server
     下载cas-server jar包,解压提取cas-server-3.4.11/modules/cas-server-webapp-3.4.11.war文件,把改文件copy到 tomcat安装目录的webapps 目下,并重命名为:cas.war.
启动tomcat,在浏览器地址栏输入:https://demo.wh.com:8443/cas/login ,回车,出现下图界面则表示成功:
这里写图片描述


五.部署CAS-Client相关的Tomcat
        自定义一个项目如A,下载cas-client jar包,解压提取cas-client-3.2.1/modules/cas-client-core-3.2.1.jar到A项目的WEB-INF\lib文件下,修改WEB-INF\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>CAS Filter</filter-name>            <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>            <init-param>                <param-name>casServerLoginUrl</param-name>                <param-value>https://demo.wh.com:8443/cas/login</param-value>            </init-param>            <init-param>                <param-name>serverName</param-name>                <param-value>http://app1.wh.com:18080</param-value>            </init-param>        </filter>        <filter-mapping>            <filter-name>CAS Filter</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://demo.wh.com:8443/cas</param-value>            </init-param>            <init-param>                <param-name>serverName</param-name>                <param-value>http://app1.wh.com:18080</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>        <!-- ======================== 单点登录结束 ======================== -->

修改conf/server.xml

<Server port="8005" shutdown="SHUTDOWN"><Connector port="8080" protocol="HTTP/1.1"               connectionTimeout="20000"               redirectPort="8443" /><Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

修改端口号如下:

<Server port="18005" shutdown="SHUTDOWN"><Connector port="18080" protocol="HTTP/1.1"               connectionTimeout="20000"               redirectPort="18443" /><Connector port="18009" protocol="AJP/1.3" redirectPort="18443" />

至此,cas-server端及cas-client端配置完成。



六.验证cas单点登录环境
        启动tomcat-server及tomcat-client,当server未登录时,访问client端会自动跳转到cas登录界面;若登陆则可直接访问。


七.搭建中遇到的问题
1.导出证书时,输入keytool -import -keystore %JAVA_HOME%\jre\lib\security\cacerts -file c:\sso\ssodemo.crt -alias ssodemo,可能会出现以下两种问题:

  • 我的java安装在C:\Program Files下,%JAVA_HOME%读取该路径,会提示Files\jre\lib\security\cacerts找不到,主要是不能识别空格造成的。
    解决办法:重新安装java环境到不包含空格的文件路径下。

  • 提示找不到jre的路径,此问题可能是tomcat运行使用的jre是安装jdk时安装jre的目录,非jdk自带的jre,当然如果是安装在同一目录下除外。
    解决办法:修改tomcat的jre的path即可。