CAS 实现单点登录(一):环境搭建、部署及简单使用_迪迪调调的博客-程序员秘密_cas webapp1 webapp2

技术标签: sso单点登录  cas环境搭建  sso-java  cas单点登录  单点登入(SSO)-CAS  

环境搭建
apache-tomcat-7.0.55
jdk1.6.0_43
CAS Server版本:cas-server-3.4.10-release
CAS Client版本:cas-client-3.2.1
如果想在自己的本地环境搭建成功,就下载我上面的各软件版本,这个在我计算机上搭建成功了,我一开始版本没配套,出现了各种问题。搭建不成功。

步骤:

1.修改host文件
在 C:\Windows\System32\drivers\etc\hosts 增加下面的域名对应关系:

127.0.0.1    sso.kxl.com
127.0.0.1    app1.kxl.com
127.0.0.1    app2.kxl.com

sso.kxl.com的域名部署cas server的tomcat,和证书的生成,其他的两个分别部署两个webapp。

2.创建证书:

证书相当于单点登录(SSO)认证系统中的钥匙,保证客户端与服务器的交互的安全;在这里简单用jdk自带的keytool工具生成证书。

  • keytool生成证书:
keytool -genkey -alias ssotest -keyalg RSA  -keypass kxlpwd  -keystore d:\keys\ssotest.keystore -storepass kxlpwd

这里写图片描述

  • 导出证书到文件:
keytool -export -alias ssotest -keystore D:\keys\ssotest.keystore -file d:\keys\ssotest.crt -storepass kxlpwd

这里写图片描述

  • 为客户端的jvm导入证书
keytool -import -keystore D:\java\jdk1.6.0_43\jre\lib\security\cacerts -file d:\keys\ssotest.crt -alias ssotest

注意:命令行中提示输入的新密码是:changeit

这里写图片描述

3.解压下载的tomcat,复制三份,用于模拟三台tomcat服务器上分别部署了cas-server,webapp1.webapp2的应用。

这里写图片描述

4.部署cas-server到tomcat_cas

将下载的cas解压缩后提取cas-server-3.4.11/modules/cas-server-webapp-3.4.11.war文件,复制到 D:\soft\apache-tomcat-7.0.55\tomcat_cas\webapps目下,并重命名为cas.war,tomcat启动的时候会解压缩这个war包部署到tomcat服务器

修改/tomcat-cas/conf/server.xml为:

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               keystoreFile="d:/keys/ssotest.keystore" keystorePass="kxlpwd"
               clientAuth="false" sslProtocol="TLS" URIEncoding="UTF-8" />

我们启动tomcat-cas服务器的tomcat,在目录…\tomcat_cas\bin\startup.bat ,双击启动启动tomcat-cas, 验证https访问配置:

这里写图片描述

点击高级配置,然后点击箭头进入(我用的是谷歌浏览器,其他的浏览器可能不太一样):

这里写图片描述

在浏览器地址栏输入:https://sso.kxl.com:8443/cas/login ,回车

这里写图片描述

输入用户名密码admin/admin,登入进去:

这里写图片描述

5.部署webapp应用

就用tomcat默认自带的 …\webapps\examples 作为演示的简单web项目

1)修改tomcat-app1的启动端口,在文件 /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" />  

2)启动tomcat-app1,浏览器输入 http://app1.kxl.com:18080/examples/servlets/

这里写图片描述

3)接下来复制 cas-client-3.2.1的lib包cas-client-core-3.2.1.jar到 tomcat-app1\webapps\examples\WEB-INF\lib\目录下, 在tomcat-app1\webapps\examples\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://sso.kxl.com:8443/cas/login</param-value>
            </init-param>
            <init-param>
                <param-name>serverName</param-name>
                <param-value>http://app1.kxl.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://sso.kxl.com:8443/cas</param-value>
            </init-param>
            <init-param>
                <param-name>serverName</param-name>
                <param-value>http://app1.kxl.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>

        <!-- ======================== 单点登录结束 ======================== -->

6 、按上面的相同的方式部署webapp2,

conf/server中端口前面改成2**
webapps/examples/WEB-INF/下的web.xml中增加上面的filter,修改相关的url.

7、测试:

这里写图片描述

  • 在app1这端输入用户名密码admin/admin,进行验证,显示app1的应用,
    然后在app2端刷新一下网页,就直接显示登入了。

这里写图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u010248330/article/details/70338800

智能推荐

工欲善其事,必先利其器_bravegogo的博客-程序员秘密

-37 内存泄露监测http://www.alonemonkey.com/2016/05/15/fbretaincycledetector-analyse/ FBRetainCycleDetector源码分析https://blog.csdn.net/java2013liu/article/details/52242969精准 iOS 内存泄露检测工具MLeaksFind...

03 类加载机制解析四:打破双亲委派机制_wyaoyao93的博客-程序员秘密

文章目录1 打破双亲委派机制1 打破双亲委派机制上节自定义的类加载器,实现了加载指定目录的class,但是还是遵循了双亲委派机制如何打破双亲委派机制很简单,我们已经知道了双亲委派机制就是在ClassLoader的loadClass方法实现的,只要我们重写该方法就可以了呗package study.wyy.jvm.classLoader;import java.io.FileInputStream;public class MyClassLoader extends ClassLoader

JSP带中文请求参数乱码的解决方法_RabbitEatPumpkin的博客-程序员秘密_jsp 带中文

<br />一、在请求页面的请求参数需要用encodeURI进行转码,然后在接收请求的页面需要进行字符集转换。<br />本例中的请求和接收页面的字符集都是UTF-8:<br />1.请求的JSP页面用JavaScript的encodeURI()方法将参数转码:<br />function toView(param){<br />     var encodeparam = encodeURI(param) ;<br />     window.location.href="/naias/advAna_fo

构建NVDLA vp时的错误_chifredhong的博客-程序员秘密

1、make: * No rule to make target错误ake[4]: *** No rule to make target '/home/chifred/NVDLA/NVDLA_debug/vp_large/libs/qbox/dtc/libfdt/fdt.c', needed by 'libfdt/fdt.o'。 停止。Makefile:342: recipe for t...

数组与Object的关系及其反射类型,数组反射应用实例,通过Array类实现数组的反射_wjw_java的博客-程序员秘密

package com.lianxi;import java.lang.reflect.Array;import java.util.Arrays;/** * 数组与Object的关系,及其反射类型 * * Array:可以对数组进行反射的类 * * 数组的反射: * 相同数据类型,相同维度的数组的Class都属于同一个 * * @author zjw */p

上传文件时提示错误信息/tmp/tomcat/local/.. no such file or directory_lx6766的博客-程序员秘密

问题描述: 昨天测试上传,本地操作,上传ok,今天在测试,和正式试过了,都报错错误提示的路径前缀也确实是不对的,后来对比了之前写的另一个接口,发现不同,才定位到这里我使用了相对路径,而服务器配置的也是相关路径,从而存储路径就和预期不同了,接口改为获取绝对路径后,问题解决本地设置的时绝对路径,所以一直是ok的...

随便推点

Contributor等你解锁! | PPSIG报名开始啦~_飞桨PaddlePaddle的博客-程序员秘密

点击左上方蓝字关注我们开源的开放性使得诸多的开发者可以加入其中,自2016年开源以来,飞桨一直致力于建设开源开放的开发者社区,也正是有了众多contributor们的加入,飞桨社区得以不断...

洛谷P1296 奶牛的耳语_水蛙菌的博客-程序员秘密

题目链接题目描述在你的养牛场,所有的奶牛都养在一排呈直线的牛栏中。一共有 nn 头奶牛,其中第 ii 头牛在直线上所处的位置可以用一个整数坐标 pi (0 ≤ pi ≤ 108) 来表示。在无聊的日子里,奶牛们常常在自己的牛栏里与其它奶牛交流一些八卦新闻。每头奶牛发出的声音响度是一样的,而由于声波的能量衰减,某头奶牛发出的声音只能被与它距离不超过 d(0 ≤ d ≤ 104 ) 的奶牛所听到,这样这对奶牛就称为可以相互交流的。现在给出所有奶牛的位置和声音所能传播的最远距离 d ,请你编个程序来计算你的养

【iOS取证篇】iPhone6及以下版本进入恢复模式和DFU模式操作方法_蘇小沐的博客-程序员秘密

过程中,如果手机没有任何反应,或者电脑上打开的iTunes显示无法识别设备等,均为进入DFU模式失败,需要重新操作。此方法不排除因后续iOS系统升级或其它原因等而失效,取证时应找相关设备再次验证后再对检材操作!由于本人能力有限,纯粹做个记录,文中如有不妥和错漏之处欢迎批评指正。【著作所有权归作者蘇小沐所有,转载请注明文章出处】名称时间开始编辑日期2021 年 11 月 18 日最后编辑日期2022 年 11 月 28 日。

Mifare S50与Mifare S70_River-D的博客-程序员秘密

射频识别技术漫谈(13)——Mifare S50与Mifare S70

HDU 2093 考试排名 (水题)_xcatf的博客-程序员秘密

考试排名Time Limit: 1000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 19617Accepted Submission(s): 6788Proble...

OpenCV中判断点在矩形中的方法_qiao_lili的博客-程序员秘密_opencv 检测点在矩形内部

目录1.问题2.思路3.实现4.资料1.问题如图1.1所示,有红色和蓝色两个点,如何判断点相对于矩形的位置呢?2.思路首先,我们知道OpenCV中有一个函数:pointPolygonTest()。它的作用是判断一个点是否在轮廓中,基本用法如下:C++: double pointPolygonTest(InputArray contour, Point2f p...

推荐文章

热门文章

相关标签