之前转载了一篇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&amp;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实现单点登录(数据库认证)相关推荐

  1. 华为外部Portal认证 Radius认证计费 实现基于Mac快速认证的Mac无感知认证和结合CAS单点登录统一认证平台和AD域LDAP对接配置

    华为外部Portal认证 Radius认证计费 实现基于Mac快速认证的Mac无感知认证 结合CAS单点登录统一认证平台 AD域LDAP对接配置 实现用户名密码实名认证 访客短信认证 二维码扫码 钉钉 ...

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

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

  3. IDEA-CAS-SSO单点登录-数据库

    [环境说明] 本案例演示过程在同一个机器上的3个tomcat服务器上,环境如下: windows10 64位 jdk1.7.0_80 apache-tomcat-7.0.82-windows-x64 ...

  4. java php 单点登陆,cas实现单点登录,登出(java跟php客户端)(转)

    cas实现单点登录,登出(java跟php客户端)(转)cas实现单点登录,登出(java和php客户端) (转) 最近项目中需要做单点登录,客户端包含java和php,java有几个应用程序,php ...

  5. CAS5.3服务器搭建及SpringBoot整合CAS实现单点登录

    CAS5.3服务器搭建及SpringBoot整合CAS实现单点登录 1.1 什么是单点登录 1.2 什么是CAS 1.3 CAS服务端部署 1.template下载 1.4 客户端搭建 1.1 什么是 ...

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

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

  7. Spring+ Spring cloud + SSO单点登录应用认证

    之前的文章中有介绍spring cloud sso集成的方案,也做过spring + jwt + redis的解决方案,不同系统的无缝隙集成,统一的sso单点登录界面的管理.每个应用集成的权限认证,白 ...

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

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

  9. cas jwt 单点登录

    单点登录是我比较喜欢的一个技术解决方案,一方面他能够提高产品使用的便利性,另一方面他分离了各个应用都需要的登录服务,对性能以及工作量都有好处.自从上次研究过JWT如何应用于会话管理,加之以前的项目中也 ...

最新文章

  1. 专访盛大创始人陈天桥:未来的杀手级应用必将诞生于脑科学
  2. 无法启动MySQL数据库
  3. [转]Joomla! 1.5中form表单的实现方式
  4. 应用程序添加到服务器,在同一应用程序中的配置服务器和eureka服务器:尝试连接到localhost:8761...
  5. Sublime Text快捷键去除空白行
  6. 飞步神速!何晓飞团队完成无人车深度学习芯片流片,算力创国内新高
  7. js获取action中返回的值
  8. 双级减速器优化matlab,基于matlab的二级齿轮减速器的优化设计.doc
  9. NDK开发之数组操作
  10. jsp的mysql数据库分页查询_Jsp如何实现分页功能(使用MySQL数据库)
  11. TensorFlow基础知识:计算图中的Op,边,和张量
  12. 螺旋模型(Spiral Model)
  13. 机器学习周志华第一章
  14. excel 图表 保持矢量图格式 粘贴进word
  15. 一文简要了解词义消歧与实体消歧
  16. java nc接口开发_OA和NC系统集成接口开发方案.doc
  17. c语言五子棋人工智能算法,五子棋人工智能算法实现研究,优化五子棋智能算法的思路...
  18. 恶意程序利用Linksys路由器漏洞在路由器中传播
  19. 中国人为什么这么爱面子?
  20. centos不能复制文件到usr/local/src下的问题,权限不够;以及找不到usr/local/src的问题

热门文章

  1. linux大容量硬盘 克隆到小硬盘_Linux添加新硬盘的挂载方法
  2. 学计算机的考研还是工作室,毕业后,考研和工作哪个更有出路,你后悔了吗?...
  3. java+卡有型号吗,第一次写java代码,就卡主了,真是惨,有木有大腿来帮忙调试一下...
  4. mac homebrew装mysql_mac系统homebrew安装mysql
  5. CUDA out of memory. Tried to allocate 392.00 MiB (GPU 0; 10.76 GiB total capacity; 652.77 MiB alread
  6. crt脚本怎么添加等待时间_抖音文案怎么写吸引人?130个抖音文案素材、案例分享!...
  7. 经典论文复现 | PyraNet:基于特征金字塔网络的人体姿态估计
  8. 第二十次CCF计算机软件能力认证总结
  9. web 小程序 ch3 小程序框架
  10. Spring Cloud Security:Oauth2使用入门