CAS服务器的搭建和Java项目集成

最近项目需要,需要做一个单点登陆的功能,由于之前没有接触过SSO,不是很了解,查阅资料后 选择使用CAS作为研究对象。CAS是有耶鲁大学研发的单点登录服务器。

借鉴了:http://blog.csdn.net/small_love/article/details/6664831的经验,

1.开发环境

  • tomcat7
  • CAS Service 版本    cas-server-4.0.0
  • CAS Client   版本    cas-client-3.3.3
  • eclipse
  • jdk1.7

2.开发步骤大致分为三部

  • 生成证书
  • 配置服务端
  • 配置客户端
  • 配置数据库连接
  • 测试

3.生成证书

  证书对于实现此单点登录非常之重要,证书是服务器端和客户端安全通信的凭证,本教程只是演示,所有用了 JDK自带的证书生成工具keytool。

  1. 生成证书

命令:keytool -genkey -alias  sslverisign -keyalg RSA -keystore D:/keys/smallkey

  其中sslverisign是生成证书的一个别名 自定义  D:/keys/smallkey 是生成的路径 一定要确保生成的路径是存在的,smallkey会自己创建。

  命令执行后如下图:

其中名字与姓氏这一最好写你的域名,如果在单击测试你可以在C:\Windows\System32\drivers\etc\hosts文件中映射一个虚拟域名。

不要写IP 其中红字部分非常重要,在后面还会用到。

配置本地虚拟域名的方法为:C:\Windows\System32\drivers\etc\hosts 找到hosts文件 打开编辑输入如下:

  

    配置的时候 该文件有时候无法修改不能保存,自个百度吧 有解决方案。

2.导出证书

  

C:\>keytool -export -file d:/keys/ssl.crt -alias sslverisign -keystore d:/keys/smallkey
ssl.crt 为生成证书的名字  sslverisign为第一步生成的证书别名 执行后 如下图:

密码为第一步自己所设定的密码

 3.把证书导入到客户端JDK中

命令:keytool -import -keystore C:\Java\jdk1.7.0_15\jre\lib\security\cacerts -file D:/keys/ssl.crt -alias sslverisign

执行如下:

导入成功.

该步骤容易出现的问题就是:

1.keytool错误: java.io.IOException: Keystore was tampered with, or password was incorrect

错误的解决方法是,把%JAVA_HOME%\lib\security下的cacerts文件删除掉,在执行

2. 还有就是jdk存放的位置路径如果存在空格也会导致导入证书不成功,提示非法(默认安装jdk的时候如:C:\Program Files 存在空格 将会导致导入不成功),需要注意。

4.配置服务端

 1、 下载CAS的服务端cas-server-4.0.0-release.zip解压,把解压后的文件中modules文件夹中的cas-server-webapp-4.0.0.war文件拷贝的D:\apache-tomcat7\webapps目录下并改重命名为cas.war 下载地址:http://downloads.jasig.org/cas/2、修改D:\apache-tomcat7\conf\server.xml文件去掉此文件83到93行之间的注释,修改为:


keystoreFile="D:/keys/smallkey"  <!--生成证书的时候的路径-->keystorePass="smalllove"/>       <!--在生成证书的时候设置的密码--> 
设置完成后手动启动tomcat:D:\apache-tomcat7\bin\startup.bat  点击该bat文件运行。

 如果运行出现如下错误 导致启动不成功。

严重: Failed to initialize end point associated with ProtocolHandler ["http-apr-443"]
 java.lang.Exception: Connector attribute SSLCertificateFile must be defined when using SSL with APR

需要修改D:\apache-tomcat7\conf\server.xml  找到如下注释掉:

<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

3、以上配置完成访问https://www.deng.com:8443/cas出现以下页面


点击继续浏览此网页,后出现


由于我们用的是cas4.0的版本 所以默认的初始账号是密码是 casuser Mellon  之前看很多教程用的是3.4的版本 那时候初始账号和密码是admin

输入账号密码后 会出现如下界面 表示登陆成功 服务器端配置完成。


5.配置客户端  下载客户端:http://downloads.jasig.org/cas-clients/,目前最新版本为:cas-client-3.3.3,然后解压cas-client-3.1.12.zip,在modules文件夹中有需要的jar包(cas-client-core-3.3.3.jar,jul-to-slf4j-1.6.1.jar,log4j-over-slf4j-1.6.1.jar,slf4j-api-1.7.1.jar).   由于自己要做测试测试两个项目登陆后是否能实现单点,在单独部署一个tomcat服务器(加之前部署修改的一共两个),如果是解压包的tomcat,就把之前的tomcat复制一个出来,打开D:\apache-tomcat-7.0.40\conf\server.xml文件,修改他的端口号保证两个tomcat启动后不冲突。
第22行修改后 <Server port="8055" shutdown="SHUTDOWN">
第70到74 修改后
    <Connector port="18080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="18443" />
第97行 修改后
<Connector port="18009" protocol="AJP/1.3" redirectPort="18443" />
登陆新建两个WEB工程 打开web.xml文件配置如下信息,我cas服务器用的默认的tomcat端口号,所以web项目我部署在后面修改端口后的tomcat上18080:两个web工程配置一样 可以在默认的index.html页面上标注一下区别。
 1 <!-- ======================== 单点登录开始 ======================== -->
 2     <!-- 用于单点退出,该过滤器用于实现单点登出功能,可选配置 -->
 3     <listener>
 4         <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
 5     </listener>
 6
 7     <!-- 该过滤器用于实现单点登出功能,可选配置。 -->
 8     <filter>
 9         <filter-name>CAS Single Sign Out Filter</filter-name>
10         <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
11     </filter>
12     <filter-mapping>
13         <filter-name>CAS Single Sign Out Filter</filter-name>
14         <url-pattern>/*</url-pattern>
15     </filter-mapping>
16
17     <!-- 该过滤器负责用户的认证工作,必须启用它 -->
18     <filter>
19         <filter-name>CASFilter</filter-name>
20         <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
21         <init-param>
22             <param-name>casServerLoginUrl</param-name>
23             <param-value>https://www.deng.com:8443/cas/login</param-value>
24             <!--这里的server是服务端的IP -->
25         </init-param>
26         <init-param>
27             <param-name>serverName</param-name>
28             <param-value>http://www.deng.com:18080</param-value>
29         </init-param>
30     </filter>
31     <filter-mapping>
32         <filter-name>CASFilter</filter-name>
33         <url-pattern>/*</url-pattern>
34     </filter-mapping>
35
36     <!-- 该过滤器负责对Ticket的校验工作,必须启用它 -->
37     <filter>
38         <filter-name>CAS Validation Filter</filter-name>
39         <filter-class>
40             org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
41         <init-param>
42             <param-name>casServerUrlPrefix</param-name>
43             <param-value>https://www.deng.com:8443/cas</param-value>
44         </init-param>
45         <init-param>
46             <param-name>serverName</param-name>
47             <param-value>http://www.deng.com:18080</param-value>
48         </init-param>
49     </filter>
50     <filter-mapping>
51         <filter-name>CAS Validation Filter</filter-name>
52         <url-pattern>/*</url-pattern>
53     </filter-mapping>
54
55     <!-- 该过滤器负责实现HttpServletRequest请求的包裹, 比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。 -->
56     <filter>
57         <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
58         <filter-class>
59             org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
60     </filter>
61     <filter-mapping>
62         <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
63         <url-pattern>/*</url-pattern>
64     </filter-mapping>
65
66     <!-- 该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。 比如AssertionHolder.getAssertion().getPrincipal().getName()。 -->
67     <filter>
68         <filter-name>CAS Assertion Thread Local Filter</filter-name>
69         <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
70     </filter>
71     <filter-mapping>
72         <filter-name>CAS Assertion Thread Local Filter</filter-name>
73         <url-pattern>/*</url-pattern>
74     </filter-mapping>
75
76     <!-- ======================== 单点登录结束 ======================== -->

配置完成后手动启动cas所属的tomcat,确认没有报错后,在eclipse部署两个web功能,然后eclipse里启动tomcat部署的两个项目。

博主建了两个简单的功能 工程名为:

启动完成后 网页输入项目任意一个项目的地址进行测试。

打开后都自动跳转到如下界面,打开另外一个项目也是如此。


登陆测试账号,验证通过后,就会返回到该项目的index页面。打开另一个项目也会跳转到对应的index页面。不会被拦截登陆。至此说明配置单点登陆成功。

5.配置数据库 目前使用的是默认账号登陆的的情况,但是要是连接到数据库又怎么办呢。下面cas服务器如何配置数据库。我使用的数据库是mysql1. 打开cas服务器所属的tomcat 找到D:\apache-tomcat7\webapps\cas\WEB-INF\lib。加入几个依赖包(cas-server-support-jdbc-4.0.0.jar,commons-dbcp-1.4.jar,commons-pool-1.6.jar,mysql-connector-java-5.0.8-bin.jar)其中cas-server-support-jdbc-4.0.0.jar可以在cas-server-4.0.0\modules目录下找到 其他的需要自行下载了。2.打开D:\apache-tomcat7\webapps\cas\WEB-INF\deployerConfigContext.xml,找到如下默认的账号密码 注释掉。 


然后新增:
 1 <bean id="primaryAuthenticationHandler" class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
 2                 <property name="dataSource" ref="dataSource" />
 3                 <property name="sql" value="select password from ms_user where user_code=?" />                   <!-- 上面这句写自己数据库sql -->    4 </bean>

 5<!-- MySQL connector -->
 6 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
 7                    <property name="driverClassName">
 8                             <value>com.mysql.jdbc.Driver</value>
 9                    </property>
10                    <property name="url">
11                             <value>jdbc:mysql://localhost:3306/test</value>
12                    </property>
13                    <property name="username">
14                             <value>数据库账号</value>
15                    </property>
16                    <property name="password">
17                             <value>数据库密码</value>
18                    </property>
19 </bean>

修改完成后再重新启动cas服务端的tomcat服务器  cas登陆页面就需要登陆自己数据库的账号才能登陆了。

时间: 2024-08-07 08:35:06

CAS服务器的搭建和Java项目集成的相关文章

Activit最入门学习文档,从如何创建项目开始共20章,看完,任何Java项目集成无压力

Activit流程引擎 本人水平,刚自学java一个多月,然后看视频做的笔记,全部傻瓜式截图教程,反正我学习之前没在网上搜索到任何小白教程, Activit官方的教程真心看不懂,因为都是文字 没具体创建步奏,所以对新手来说很无奈, 然后吧,就把自己的学习经验贡献出来啦 最小白的文档,看完之后,集成到任何java项目中都无压力,我最后的是做了个Jfinal集成,估计这是网上搜到最全的容易懂的入门学习文档,本人自学java一个月,反正我看官方例子什么的都看不懂,然后各搜素也没收到教程视频,还好有别人

CAS5.2x单点登录(一)——搭建cas服务器

系列文章列表: https://blog.csdn.net/u013825231/article/category/7517313 单点登录的介绍 单点登录(Single Sign On ,简称SSO)是目前比较流行的服务于企业业务整合的解决方案之一,SSO 使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. CAS(Central Authentication Service)是 Yale大学发起的一个企业级的.开源的项目,旨在为 Web 应用系统提供一种可靠的单点登录

创建第一个java项目(初学者进) 想了解更多关于java的知识吗?关注我,不定时更新!

语言:java 开发平台:myeclipse 1:搭建一个java 项目 2: 点击左上角file→Java Project Project 是项目名称,Location 是项目存放地址,接下来点Finish,一个java项目就创建好了. 创建后的java项目 如图: 3:之后右键src→New→Packge 创建一个包,包用来存储各种分类的java类. 包的命名规范:国家.公司名.项目名.分层 在此初学java的同学可以不用包的命名规范,在以后学习分成后再注重包的命名规范. 4:创建好包后,右

cas协议,以及tomcat搭建cas服务器

1.      CAS 简介 1.1.  What is CAS ? CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的.开源的项目,旨在为 Web 应用系统提供一种可靠的单点登录解决方法(属于 Web SSO ). CAS 开始于 2001 年, 并在 2004 年 12 月正式成为 JA-SIG 的一个项目. 1.2.  主要特性 1.   开源的.多协议的 SSO 解决方案: Protocols : Custom Protoc

Jenkins+Maven进行Java项目持续集成

最近配置了Jenkins服务器,记录下基本过程.(当然还遇到了若干小问题,兵来将挡水来土掩就是了) Jenkins安装 安装Tomcat 从Jenkins官网下载jenkins.war文件.官网地址:http://jenkins-ci.org/,注意选择最新版本的Long-Term Support Release 把war文件部署到Tomcat中 启动Tomcat 在浏览器中配置Jenkins,浏览器地址:http://{Tomcat IP}:{Tomcat port}/jenkins/ Jen

windows下流媒体nginx-rmtp-module服务器搭建及java程序调用fmpeg将rtsp转rtmp直播流

第一步:首先介绍一下所用相关技术 注:项目中使用的jwplayer插件,不支持rtsp协议,所以使用以下技术来进行转艺 FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.在这里我只用到了它的视屏格式转换功能,将rtsp协议的视频流转成rtmp Rtsp协议(实时流传输协议):  公司用的是海康的监控地址为(rtsp://admin:[email protected]/h264/ch1/main/av_stream) 3. Rtmp协议(实时消息传输协议 ):

Java项目框架搭建系列(Java学习路线)

前言: 已经工作4年,真是时间飞逝. 其实当你在一间公司工作一两年之后,公司用到的开发框架的基本使用你应该都会了. 你会根据一个现有项目A复制一下搭建出另外一个类似框架的项目B,然后在项目B上进行业务逻辑开发. 如果你更努力一点,你可能有去摸索一些配置的作用,一些问题的排查会更有经验和自己的想法. 如果你好奇心更强一点,可能会去了解一些框架的原理,各个框架之间是怎么相互协助工作的.自己能否从无到有将这些框架串联起来. 想写一系列这样的文章:将Java项目开发过程中的一些框架,如何一步步串联起来,

【java项目实战】一步步教你使用MyEclipse搭建java Web项目开发环境(一)

首先,在开始搭建MyEclipse的开发环境之前,还有三步工具的安装需要完成,只要在安装配置成功之后才可以进入下面的java Web项目开发环境的搭建. 1.安装工具 第一步,下载并安装JDK,到官网上下载安装即可,之后需要细心的配置环境变量,我给大家推荐百度文库的一篇文章,猛戳这里. 第二步,下载Tomcat,当然可以去Apache Tomcat的官网,同样,您可以移驾到我的资源下载,外送API文档(免资源分). 第三步,下载MyEclipse,MyEclipse官网,傻瓜式安装即可. ===

项目总结50:Linux服务器上web项目Java项目性能调优

项目总结50:Linux服务器上web项目Java项目性能调优 最近上线的电商项目,发现非常卡,用户体验非常差,折腾了好久之后,也逐渐找到原因,并针对原因解决方案,先整理总结. 项目基本情况: 1-使用阿里ECS.OSS等一系列相关服务: 2-用户总量1W+,日活量500+ 3-电商项目,有APP.小程序.管理平台三个模块,其中接口150+ 4-项目使用SSM框架: 5-项目tomcat服务,数据库Mysql,Redis放在一个同一个服务器上: 问题表现: 1-接口反应非常慢,导致APP和小程序