jasig CAS实现单点登录(数据库认证)
之前转载了一篇IBM的CAS单点登录实现,不过瘾,于是到官网弄下最新版本来再战一把:
这个CAS(Central Authentication Service)是耶鲁大学的开源项目,旨在实现企业应用单点登录,还是很不错的,牛b的大学确实不一样,不是我们这些2b学校式的教育。其官网http://www.jasig.org/cas,很不幸,应该翻了墙才能进去,自己去捣鼓翻墙吧,建议就GoAgent足已。
- 实验环境:
1
|
1.jdk7_45
|
2
|
2.tomcat7_45
|
3
|
3.三台虚拟机:
|
4
|
1.tomcat1(部署cas验证服务器)
|
5
|
2.tomcat2(其中部署了两个web应用cas-web-client, cas-web-client2)
|
6
|
3.mysql server一台(直接到数据库种验证)
|
- 原理图:
- 资源下载地址:
http://downloads.jasig.org/
解压之,jar会再modules目录下,其他都为源代码项目
已经打包的server:
client:
------------------------------------------------------
开始搭建:
- CAS服务器配置:
1.在tomcat1所在机器生成证书:
这时会在用户主目录下生成.keystore文件,这个文件也可在上述命令种指定,其中生成过程会填入一些信息,注意输入第一个时(名字与姓氏)就输入你本机器的域名(不能时IP), 这里我的是www.tomcat1.com:
2.导出证书(后面将其导入客户端的jre环境中):
于是在用户主目录下就有了ssotest.crt证书文件(保留着,待会客户端配置要用),
3.配置Tomcat SSL: ${TOMCAT_HOME}/conf/server.xml中83-93行修改为:
01
|
<!-- Define a SSL HTTP/1.1 Connector on port 8443
|
02
|
This connector uses the JSSE configuration, when using APR, the
|
03
|
connector should be using the OpenSSL style configuration
|
04
|
described in the APR documentation -->
|
05
|
<!-- configure ssl -->
|
06
|
< Connector port = "8443" protocol = "HTTP/1.1" SSLEnabled = "true"
|
07
|
maxThreads = "150" scheme = "https" secure = "true"
|
08
|
clientAuth = "false" sslProtocol = "TLS"
|
09
|
keystoreFile = "/home/tomcatadmin/.keystore"
|
10
|
keystorePass = "ssotest" />
|
4.将上面下载资源中的cas-server-webapp-3.5.2.war改名为cas.war, 复制到${TOMCAT_HOME}/webapps/下,启动tomcat,这时进入https://www.tomcat1.com:8443/cas/, 见下图,则服务端已经配置ok:
这时输入用户名及密码(保持一样就可以,默认CAS验证方式只要用户名密码一样就行), 可见其默认验证实现类SimpleTestUsernamePasswordAuthenticationHandler:
01
|
public final class SimpleTestUsernamePasswordAuthenticationHandler extends
|
02
|
AbstractUsernamePasswordAuthenticationHandler {
|
03
|
04
|
public boolean authenticateUsernamePasswordInternal( final UsernamePasswordCredentials credentials) {
|
05
|
final String username = credentials.getUsername();
|
06
|
final String password = credentials.getPassword();
|
07
|
08
|
if (StringUtils.hasText(username) && StringUtils.hasText(password)
|
09
|
&& username.equals(getPasswordEncoder().encode(password))) { //用户名及密码相同就成功
|
10
|
return true ;
|
11
|
}
|
12
|
return false ;
|
13
|
}
|
14
|
}
|
这样CAS服务端就默认配置完毕了,待会儿我们还要配置数据库验证。
- 配置web客户端:
1.生成.keystore(同上);
2.将CAS服务端的导出ssotest.crt证书拷贝到某目录,并且导入到客户端机器的jre运行环境中:
1
|
keytool - import -keystore $JAVA_HOME/jre/lib/security/cacerts - file ~/ssotest.crt - alias ssotest
|
2
|
# NOTE: 有可能会有异常:java.io.IOException: Keystore was tampered with, or password was incorrect. 那就先删除本机上述的cacerts文件。
|
3.配置客户端Tomcat SSL(同上);
4.新建WEB项目cas-web-client, 并加入依赖包:cas-client-core-3.2.1.jar,commons-logging-1.1.jar
5.配置web.xml:
01
|
<? xml version = "1.0" encoding = "UTF-8" ?>
|
02
|
< web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns = "http://java.sun.com/xml/ns/javaee" xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id = "WebApp_ID" version = "2.5" >
|
03
|
< display-name >cas-web-client2</ display-name >
|
04
|
< listener >
|
05
|
< listener-class >
|
06
|
org.jasig.cas.client.session.SingleSignOutHttpSessionListener
|
07
|
</ listener-class >
|
08
|
</ listener >
|
09
|
< filter >
|
10
|
< filter-name >CasSingleSignOutFilter</ filter-name >
|
11
|
< filter-class >org.jasig.cas.client.session.SingleSignOutFilter</ filter-class >
|
12
|
</ filter >
|
13
|
< filter-mapping >
|
14
|
< filter-name >CasSingleSignOutFilter</ filter-name >
|
15
|
< url-pattern >/*</ url-pattern >
|
16
|
</ filter-mapping >
|
17
|
< filter >
|
18
|
< filter-name >CASFilter</ filter-name >
|
19
|
< filter-class >org.jasig.cas.client.authentication.AuthenticationFilter</ filter-class >
|
20
|
< init-param >
|
21
|
< param-name >casServerLoginUrl</ param-name > <!-- Cas Server登录url-->
|
22
|
< param-value >https://www.tomcat1.com:8443/cas/login</ param-value >
|
23
|
</ init-param >
|
24
|
< init-param > <!-- 配置当前web应用所在的web服务器域名url -->
|
25
|
< param-name >serverName</ param-name >
|
26
|
< param-value >http://www.tomcat2.com:8080</ param-value >
|
27
|
</ init-param >
|
28
|
</ filter >
|
29
|
< filter-mapping >
|
30
|
< filter-name >CASFilter</ filter-name >
|
31
|
< url-pattern >/*</ url-pattern >
|
32
|
</ filter-mapping >
|
33
|
< filter >
|
34
|
< filter-name >CasTicketFilter</ filter-name >
|
35
|
< filter-class >
|
36
|
org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</ filter-class >
|
37
|
< init-param >
|
38
|
< param-name >casServerUrlPrefix</ param-name >
|
39
|
< param-value >https://www.tomcat1.com:8443/cas</ param-value >
|
40
|
</ init-param >
|
41
|
< init-param >
|
42
|
< param-name >serverName</ param-name >
|
43
|
< param-value >http://www.tomcat2.com:8080</ param-value >
|
44
|
</ init-param >
|
45
|
</ filter >
|
46
|
< filter-mapping >
|
47
|
< filter-name >CasTicketFilter</ filter-name >
|
48
|
< url-pattern >/*</ url-pattern >
|
49
|
</ filter-mapping >
|
50
|
< filter >
|
51
|
< filter-name >CasRequestWrapFilter</ filter-name >
|
52
|
< filter-class >
|
53
|
org.jasig.cas.client.util.HttpServletRequestWrapperFilter</ filter-class >
|
54
|
</ filter >
|
55
|
< filter-mapping >
|
56
|
< filter-name >CasRequestWrapFilter</ filter-name >
|
57
|
< url-pattern >/*</ url-pattern >
|
58
|
</ filter-mapping >
|
59
|
< filter >
|
60
|
< filter-name >AssertionThreadLocalFilter</ filter-name >
|
61
|
< filter-class >org.jasig.cas.client.util.AssertionThreadLocalFilter</ filter-class >
|
62
|
</ filter >
|
63
|
< filter-mapping >
|
64
|
< filter-name >AssertionThreadLocalFilter</ filter-name >
|
65
|
< url-pattern >/*</ url-pattern >
|
66
|
</ filter-mapping >
|
67
|
< welcome-file-list >
|
68
|
< welcome-file >index.jsp</ welcome-file >
|
69
|
</ welcome-file-list >
|
70
|
</ web-app >
|
这样cas-web-client就完成了,拷贝一份为另一个web客户端cas-web-client2:
启动Cas Server所在tomcat(Tomcat1),再启动web客户端所在tomcat(Tomcat2),此时我们访问两个web客户端:
http://www.tomcat2.com:8080/cas-web-client/index.jsp
http://www.tomcat2.com:8080/cas-web-client2/index.jsp
都会被重定想到CAS Server登录界面,登录成功其中之一(将看到对应的index.jsp),再刷新另一个(也能看到对应的index.jsp了,因为已经登录过了), 这就算服务端和客户端都配置OK了。
------------------------------------------------------
- 现在就是要定制我们自己的验证方式(基于数据库验证):
1.新建WEB项目cas-auth-server,你需要将cas-server-webapp-3.5.2.war中的资源对应拷贝到项目中,再把下载包中cas-server-webapp的源码考到项目中,由于基于数据库验证,还得将cas-server-support-jdbc-3.5.2.jar和mysql-connector驱动包拷贝到WEB-INF/lib目录下,这样就构成了纯净的cas server项目,当然你也可以通过maven去构建,官网也有说明,如图:
2.我们要做的是修改一些配置,就是WEB-INF/deployerConfigContext.xml文件,先配置mysql数据源:
1
|
<!-- DataSource,根据你的环境来定 -->
|
2
|
< bean id = "mysqlDataSource" class = "org.apache.commons.dbcp.BasicDataSource" >
|
3
|
< property name = "driverClassName" value = "com.mysql.jdbc.Driver" />
|
4
|
< property name = "url" value = "jdbc:mysql://192.168.141.129:3306/blog?useUnicode=true&characterEncoding=utf-8" />
|
5
|
< property name = "username" value = "mysqladmin" />
|
6
|
< property name = "password" value = "mysqladmin" />
|
7
|
</ bean >
|
3.修改 authenticationManager bean的属性 authenticationHandlers:
01
|
< property name = "authenticationHandlers" >
|
02
|
< list >
|
03
|
< bean class = "org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" p:httpClient-ref = "httpClient" />
|
04
|
<!--注释掉默认的的认证实现<bean
|
05
|
class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />-->
|
06
|
<!-- 数据库查询认证处理器 -->
|
07
|
< bean class = "org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler" >
|
08
|
< property name = "dataSource" ref = "mysqlDataSource" />
|
09
|
< property name = "sql"
|
10
|
value = "select password from t_user where username = ?" />
|
11
|
< property name = "passwordEncoder" ref = "myPasswordEncoder" ></ property >
|
12
|
</ bean >
|
13
|
</ list >
|
14
|
</ property >
|
1
|
<!-- 自己定义的密码转译器,你可以自己定义,也可以用CAS提供的 -->
|
2
|
< bean id = "myPasswordEncoder" class = "org.jasig.cas.custom.encoder.MyPasswordEncoder" />
|
这样就配置完成了,将项目导出war包,并部署到tomcat1所在机器上运行起来,效果会之前一样。
收工。
http://my.oschina.net/indestiny/blog/200768
jasig CAS实现单点登录(数据库认证)相关推荐
- 华为外部Portal认证 Radius认证计费 实现基于Mac快速认证的Mac无感知认证和结合CAS单点登录统一认证平台和AD域LDAP对接配置
华为外部Portal认证 Radius认证计费 实现基于Mac快速认证的Mac无感知认证 结合CAS单点登录统一认证平台 AD域LDAP对接配置 实现用户名密码实名认证 访客短信认证 二维码扫码 钉钉 ...
- CAS SSO 单点登录 【完整版】
什么是单点登录?什么是SSO? SSO就是单点登录!!! SSO即Single Sign On. 可是为什么我们要单点登录呢?为什么不能把所有的系统做成一个war包里呢? 道理很简单啊,如果这个银行这 ...
- IDEA-CAS-SSO单点登录-数据库
[环境说明] 本案例演示过程在同一个机器上的3个tomcat服务器上,环境如下: windows10 64位 jdk1.7.0_80 apache-tomcat-7.0.82-windows-x64 ...
- java php 单点登陆,cas实现单点登录,登出(java跟php客户端)(转)
cas实现单点登录,登出(java跟php客户端)(转)cas实现单点登录,登出(java和php客户端) (转) 最近项目中需要做单点登录,客户端包含java和php,java有几个应用程序,php ...
- CAS5.3服务器搭建及SpringBoot整合CAS实现单点登录
CAS5.3服务器搭建及SpringBoot整合CAS实现单点登录 1.1 什么是单点登录 1.2 什么是CAS 1.3 CAS服务端部署 1.template下载 1.4 客户端搭建 1.1 什么是 ...
- [精华][推荐]CAS SSO单点登录服务端客户端学习
1.了解单点登录 SSO 主要特点是: SSO 应用之间使用 Web 协议(如 HTTPS) ,并且只有一个登录入口. SSO 的体系中有下面三种角色: 1) User(多个) 2) Web 应用(多 ...
- Spring+ Spring cloud + SSO单点登录应用认证
之前的文章中有介绍spring cloud sso集成的方案,也做过spring + jwt + redis的解决方案,不同系统的无缝隙集成,统一的sso单点登录界面的管理.每个应用集成的权限认证,白 ...
- Java架构-CAS SSO单点登录框架介绍
1.了解单点登录 SSO 主要特点是: SSO 应用之间使用 Web 协议(如 HTTPS) ,并且只有一个登录入口. SSO 的体系中有下面三种角色: User(多个) Web 应用(多个) SSO ...
- cas jwt 单点登录
单点登录是我比较喜欢的一个技术解决方案,一方面他能够提高产品使用的便利性,另一方面他分离了各个应用都需要的登录服务,对性能以及工作量都有好处.自从上次研究过JWT如何应用于会话管理,加之以前的项目中也 ...
最新文章
- 专访盛大创始人陈天桥:未来的杀手级应用必将诞生于脑科学
- 无法启动MySQL数据库
- [转]Joomla! 1.5中form表单的实现方式
- 应用程序添加到服务器,在同一应用程序中的配置服务器和eureka服务器:尝试连接到localhost:8761...
- Sublime Text快捷键去除空白行
- 飞步神速!何晓飞团队完成无人车深度学习芯片流片,算力创国内新高
- js获取action中返回的值
- 双级减速器优化matlab,基于matlab的二级齿轮减速器的优化设计.doc
- NDK开发之数组操作
- jsp的mysql数据库分页查询_Jsp如何实现分页功能(使用MySQL数据库)
- TensorFlow基础知识:计算图中的Op,边,和张量
- 螺旋模型(Spiral Model)
- 机器学习周志华第一章
- excel 图表 保持矢量图格式 粘贴进word
- 一文简要了解词义消歧与实体消歧
- java nc接口开发_OA和NC系统集成接口开发方案.doc
- c语言五子棋人工智能算法,五子棋人工智能算法实现研究,优化五子棋智能算法的思路...
- 恶意程序利用Linksys路由器漏洞在路由器中传播
- 中国人为什么这么爱面子?
- centos不能复制文件到usr/local/src下的问题,权限不够;以及找不到usr/local/src的问题
热门文章
- linux大容量硬盘 克隆到小硬盘_Linux添加新硬盘的挂载方法
- 学计算机的考研还是工作室,毕业后,考研和工作哪个更有出路,你后悔了吗?...
- java+卡有型号吗,第一次写java代码,就卡主了,真是惨,有木有大腿来帮忙调试一下...
- mac homebrew装mysql_mac系统homebrew安装mysql
- CUDA out of memory. Tried to allocate 392.00 MiB (GPU 0; 10.76 GiB total capacity; 652.77 MiB alread
- crt脚本怎么添加等待时间_抖音文案怎么写吸引人?130个抖音文案素材、案例分享!...
- 经典论文复现 | PyraNet:基于特征金字塔网络的人体姿态估计
- 第二十次CCF计算机软件能力认证总结
- web 小程序 ch3 小程序框架
- Spring Cloud Security:Oauth2使用入门