【环境说明】

本案例演示过程在同一个机器上的3个tomcat服务器上,环境如下:

  • windows10 64位

  • jdk1.7.0_80

  • apache-tomcat-7.0.82-windows-x64

  • cas-server-webapp-4.0.0.war、cas-client-core-3.2.1.jar、commons-logging.jar

  • 确保本地jdk环境已经搭建好,JAVA_HOME环境变量配置完毕。

有关cas概念请使用TP(传送)cas-sso单点登录理论 详细了解,我就不赘述了。

一.修改hosts文件

1.编辑C:\Windows\System32\drivers\etc\hosts 添加如下3条信息

127.0.0.1 server.zhy94.com  ---对应cas-server服务器部署域名
127.0.0.1 client1.zhy94.com --对应web应用1服务器部署域名
127.0.0.1 client2.zhy94.com --对应web应用2服务器部署域名

二.配置安全证书

1.cmd打开命令窗口

2.使用如下命令生成证书

keytool -genkey -alias ssodemo -keyalg RSA -keysize 1024 -keypass zhy123 -validity 365 -keystore c:\zhy.keystore -storepass

zhy123

-alias后面的别名可以自定义,-keypass指定证书密钥库的密码, -storepass和前面keypass密码相同,否则下面tomcat 配置https 会访问失败

-keystore指定证书的位置,
这里指定放在c盘根目录,密钥库名称可以自定义,这里文件名为zhy.keystore

重:名字与姓氏这一选项应与之前hosts文件上的cas-server域名一直

3.导出证书

keytool -export -alias ssodemo -keystore c:\zhy.keystore -file c:\ssodemo.crt -storepass zhy123

-alias后面的名称要与生成证书的命令里面的alias的名称一致. –keystore后面指定证书存放的位置,这里我放在C盘根目录,
同时证书名称要与【生成证书】对应的命令里的keystore名称一致.这里是zhy.keystore,-file后面才crt路径,我也指定在c盘根目录.

–storepass的证书密码要与上面输入的密码一致.检查c盘下是否存在该证书 ssodemo.crt

4.使该证书导入jdk证书库,命令窗进入jdk下的如下路径

cd C:\Program Files\Java\jdk1.7.0_80\jre\lib\security

必须进入该文件夹,然后再执行下面的命令

keytool -import -alias ssodemo -file c:\ssodemo.crt -keystore cacerts -trustcacerts

5.如果原来有证书需要更新则

keytool -list -keystore cacerts 
keytool -delete -alias akazam_email -keystore cacerts 
命令窗进入jdk目录下的证书路径,即C:\Program Files\Java\jdk1.7.0_80\jre\lib\security
keytool -import -alias ssodemo -file c:\ssodemo.crt -keystore cacerts -trustcacerts

3.部署CAS-Server服务器

1.tomcat安装目录下如下路径:D:\User\ProgramFile\tomcat7\conf 打开server.xml文件
<!--
<Connector executor="tomcatThreadPool"
           port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />
-->

将注释去掉,并修改为

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

其中keystoreFile 为证书位置,keystorePass为刚刚设置的密码,这两项一定要与前面一致

2.验证https的可用性

进入tomcat如下路径:D:\User\ProgramFile\tomcat7\bin

执行startup.bat脚本,然后登陆https://server.zhy94.com:8443/cas/login,首先应为https链接有风险,点击高级选项,继续访问

应该进入tomcat的主页

4.部署CAS-Server

CAS-Server 下载地址: http://www.jasig.org/cas/download

也可以去我的CSDN地址直接下载war包 (赚点积分,多多见谅):cas-server-webapp-4.0.0.war

下载的文件应为:cas-server-4.0.0-release.zip 解压后为:cas-server-4.0.0,进入改路径下的modules文件夹,找到

cas-server-webapp-4.0.0.war,将该文件重命名为cas.war,并放入D:\User\ProgramFile\tomcat7\webapps下,然后调用

D:\User\ProgramFile\tomcat7\bin下的startup.bat脚本启动tomcat,war包就会自动解压为cas项目。然后访问如下链接

https://server.zhy94.com:8443/cas/login 进入cas登陆验证界面。如下图示

点击上图标志按钮可变为中文(i18n)

至于用户名密码在D:\User\ProgramFile\tomcat7\webapps\cas\WEB-INF 下的deployerConfigContext.xml文件中

找到

<bean id="primaryAuthenticationHandler" class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler">
  <property name="users">
    <map>
      <entry key="casuser" value="Mellon"/>
    </map>
  </property>
</bean>

其中key为账户,value为密码(应该和我的一样,放心直接登陆吧)。

但是,肯定有人问用户名密码一定需要存入数据库吧,所以下面实在数据库设置账户密码的方法。

数据库设置账户密码:

1.添加jar包

数据库使用的为:mysql

cas作为一个webapp已经部署了,但是他没有访问数据库的jar包,就需要我们手动给他加入啦

为cas项目(路径为:D:\User\ProgramFile\tomcat7\webapps\cas\WEB-INF\lib)

WEB-INF下lib下添加如下三个jar包

c3p0-0.9.1.2.jar、cas-server-support-jdbc-4.0.0.jar、mysql-connector-java-5.1.13-bin.jar

下载地址(赚点积分,多谢打赏):jar包下载

2.修改cas配置文件,以方便支持数据库认证。

编辑D:\User\ProgramFile\tomcat7\webapps\cas\WEB-INF下的deployerConfigContext.xml

<bean id="authenticationManager" class="org.jasig.cas.authentication.PolicyBasedAuthenticationManager">
  <constructor-arg>
    <map>
      <!--
         | IMPORTANT
         | Every handler requires a unique name.
         | If more than one instance of the same handler class is configured, you must explicitly
         | set its name to something other than its default name (typically the simple class name).
         -->
      <entry key-ref="proxyAuthenticationHandler" value-ref="proxyPrincipalResolver" />
      <!--<entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" />-->
      <!-- key-ref指定自己的本地数据库访问 -->
      <entry key-ref="dbAuthHandler" value-ref="primaryPrincipalResolver"/>
    </map>
  </constructor-arg>

按照我上图的处理方式处理,注释掉<!--<entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" />-->

添加<entry key-ref="dbAuthHandler" value-ref="primaryPrincipalResolver"/>

并在该文件添加数据库的bean如下

<!-- 指定c3p0数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  <property name="driverClass" value="com.mysql.jdbc.Driver" />
  <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/webitma?useUnicode=true&amp;characterEncoding=UTF-8" />
  <property name="user" value="root" />
  <property name="password" value="123" />
</bean>

<!-- 访问本地数据库 -->
<bean id="dbAuthHandler"
      class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"
      p:dataSource-ref="dataSource"
      p:sql="SELECT u.`password` FROM `sec_user` u WHERE u.`account` = ?" />

其中sql语句可换为任何一张本地(自定义)用户表和任何字段。所以下面就是你建表配置数据库啦~!看清上面的jdbcUrl别和我的一样

,你连不上我的数据库,那 &nbsp;&nbsp;&nbsp;太正常了~!

5.部署web应用,实现单点登录

下面就要到最总要的时刻啦~~!
1.打开我们的IDEA(我的版本是IDEA14),新建一个java--web项目(这不用写了吧?这个不会就看cas-server有点好高骛远了哦~!)
我新建的web1名称为:casClient1 然后为WEB-INF下建立lib文件夹,因为需要与客户端交互,所以导入:
cas-client-core-3.2.1.jar、commons-logging.jar包,至于jar包怎么导入到你的项目中去,
请进传送门:IDEA如何导入jar包
下载地址(没啦~!我保证这是最后一个赚积分的链接(哈哈)):
编辑index.jsp 我写的内容是

<h1>This is casClient1~~~~~~!...........king of the world</h1>

以区分casClient1和即将部署的casClient2

然后修改casClient1 下的web.xml,添加下面的filter,大家仔细观看下面的配置,其中servName(有两个,都要改)

写的是:http://client1.zhy94.com:9090,所以等会部署的时候端口要写9090了

(同时记住,你刚刚部署cas-server的tomcat窗口不要关,关了谁帮你验证啊?),

继续写8080,会个部署cas-server的tomcat服务器发生端口冲突。

<!-- 用于单点退出,该过滤器用于实现单点登出功能,可选配置-->
<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://server.zhy94.com:8443/cas/login</param-value>
    </init-param>
    <init-param>
        <param-name>serverName</param-name>
        <param-value>http://client1.zhy94.com:9090</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.Cas10TicketValidationFilter</filter-class>
    <init-param>
        <param-name>casServerUrlPrefix</param-name>
        <param-value>https://server.zhy94.com:8443/cas</param-value>
    </init-param>
    <init-param>
        <param-name>serverName</param-name>
        <param-value>http://client1.zhy94.com:9090</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>

,接下来就是激动人心的IDEA启动该项目实现CAS---SSO单点登陆的时刻啦~!

六,最终实现

如图:
然后启动我们的项目(再说一次,原来部署cas-server的tomcat窗口不要关啊,关了就没法验证啦~!)

访问:http://client1.zhy94.com:9090/casClient1/index.jsp

就会自动跳转到:

https://server.zhy94.com:8443/cas/login?service=http%3A%2F%2Fclient1.zhy94.com%3A9090%2FcasClient1%2Findex.jsp

如下图所示:

之后输入你在数据库设计的账户密码就好了,登陆结果如下图:

成功访问,然后如法炮制另一个javaweb项目。并启动,直接访问

之后会出现登陆成功界面,这就表示cas-server已经部署成功,我们需要在另外两台服务器上写两个项目然后利用cas进行验证。

http://client2.zhy94.com:8989/casClient2/index.jsp,就会无需验证,直接访问到casClient2的index.jsp页面啦~!

想重复实现,只要用浏览器清除Cookie就好了~!

到此为止~!IDEA -CAS -SSO单点登录实现啦~!菜鸟一枚多多见谅。

本文大片抄袭,呸~!是引用了另外一个大拿的文章传送门在此传送门。(本片文章所有资源下载共需9个积分,实在没有的话请联系本人QQ:583760722(最好自己下,我想赚点积分啦,知识无价,友谊长存啊~!))。

IDEA-CAS-SSO单点登录-数据库相关推荐

  1. CAS SSO 单点登录 【完整版】

    什么是单点登录?什么是SSO? SSO就是单点登录!!! SSO即Single Sign On. 可是为什么我们要单点登录呢?为什么不能把所有的系统做成一个war包里呢? 道理很简单啊,如果这个银行这 ...

  2. [精华][推荐]CAS SSO单点登录服务端客户端学习

    1.了解单点登录 SSO 主要特点是: SSO 应用之间使用 Web 协议(如 HTTPS) ,并且只有一个登录入口. SSO 的体系中有下面三种角色: 1) User(多个) 2) Web 应用(多 ...

  3. Java架构-CAS SSO单点登录框架介绍

    1.了解单点登录 SSO 主要特点是: SSO 应用之间使用 Web 协议(如 HTTPS) ,并且只有一个登录入口. SSO 的体系中有下面三种角色: User(多个) Web 应用(多个) SSO ...

  4. CAS SSO 单点登录 实例

    1.因为是本地模拟sso环境,而sso的环境测试需要域名,所以需要虚拟几个域名出来,步骤如下: 2.进入目录C:\Windows\System32\drivers\etc 3.修改hosts文件 12 ...

  5. jasig CAS实现单点登录(数据库认证)

    之前转载了一篇IBM的CAS单点登录实现,不过瘾,于是到官网弄下最新版本来再战一把: 这个CAS(Central Authentication Service)是耶鲁大学的开源项目,旨在实现企业应用单 ...

  6. 本地前后端联调跳过cas sso单点登录

    很多项目集成cas单点登录系统,在本地开发联调的时候,往往会遇到单点登录的拦截,这会影响到我们正常的联调.我们客户端和服务通信的身份信息存储在浏览器cookie里面,那么处理方式非常简单.我们只要想办 ...

  7. cas sso单点登录 登录过程和登出过程原理说明

    CAS大体原理我就不说了,网上一大把,不过具体交互流程没说清楚,所以有这篇文章,如果有错误,请多多指教 登录过程 用户第一次访问一个CAS 服务的客户web 应用时(访问URL :http://192 ...

  8. CAS 5.2.x 实现SSO单点登录教程记录

    CAS SSO 单点登录记录 作者:刘仁奎 个人网址 程序喵:http://www.ibloger.net / http://www.chengxumiao.net QQ:1056856191 Git ...

  9. cas跨域单点登录原理_CAS实现SSO单点登录原理

    1.      CAS 简介 1.1.  What is CAS ? CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的.开源的项目,旨 ...

最新文章

  1. 微软Windows Server 2008之二计算机名称
  2. 【面试必会】editplus使用教程java
  3. Ubuntu下用gcc与nasm联合编译
  4. PMCAFF出品|十一月30篇爆款文章合集,干货、技能、内涵齐飞,总有一款适合你
  5. B 站硬件大佬在 GitHub 上开源了一款神器
  6. 机器学习-单个感知器实现逻辑或(matlab实现)
  7. OMNet++新建工程及运行
  8. 函数计算搭建 Serverless Web 应用(一)- HTTP 触发器
  9. 字符串比较中NSNumericSearch选项的工作原理
  10. 典型微型计算机控制系统的实例,微型计算机控制技术
  11. ZendStudio 安装
  12. windows配置路由表办公网和外网自动切换
  13. 常用计算机二级题库,2016最新计算机二级office题库
  14. SegmentFault 技术圈上线,快来找寻你的圈中好友
  15. Python处理excel合并单元格
  16. POJ.3281 dining 最大流+拆点
  17. Is necessary to close fille in python?
  18. 粉末成型工艺(粉末冶金粉末注射成型)
  19. Parallels Desktop 15.1.4 直装版 — 苹果电脑虚拟机
  20. 欢迎来到WebGPU的世界

热门文章

  1. 前景无限的golang,分分钟高薪offer
  2. mysql w3scoll_window属性:onscroll
  3. 两台服务器的主从数据库实时同步
  4. 非常简单的一个块设备驱动,simp_blkdev,2.6.31之后的变化
  5. 深入理解《动态内存》管理——C语言
  6. 时序数据预测-Arima模型篇
  7. Spark的算子的分类
  8. 重度抑郁症患者的非快速眼动睡眠
  9. 【转】程序员如何去正视自己的职业人生规划
  10. 搭建Eureka注册中心的集群