SSO之CAS备忘
http://blog.chinaunix.net/uid-28380443-id-4740103.html
自己负责的公司基于CAS单点登录平台架构已经上线运行,很多细节的东西是时候备忘一下了,开源的东西,具体需要记得倒不是很多,跟着debug看源码理解,学习为主。
首先说说整个框架的思路:由于这段时间连续上了几个项目,用户登录管理这一块一直在做重复的工作,所以考虑将这些模块抽出来单独做成一个系统。最初的想法只是做一个简单的用于登录检测方面的东西,想的也很简单,选memcached来做分布式缓存,但随着项目越写越大,又加入很多功能,早已不是最早的简单验证登录这么回事了,于是选用了cas来进行改造。
自己开发过程中的几个比较集中的阶段:
(1)
环境的搭建:重要集中在证书的生成和管理
先生成证书文件:
keytool -genkey -alias tomcat-server -keyalg RSA -keypass changeit -storepass changeit -keystore server.keystore(生成文件)
注意name是计算机的名字或者项目的域名,生成完了后自己开发过程中为了方便去host文件里将这个名字映射给本机
得到server.keystore,配置tomcat中的server.xml的ssl证书
<Connector
SSLEnabled="true"
clientAuth="false"
keystoreFile="G:/apache-tomcat-7.0.47/conf/server.keystore"
keystorePass="changeit"
maxThreads="150"
port="8443"
protocol="HTTP/1.1"
scheme="https"
secure="true"
sslProtocol="TLS"
truststoreFile="D:/JAVA/jdk7/jre/lib/security/cacerts"/>
然后导出证书
假如和我一样,自己在开发中又本机又是服务器又是客户端,那么还需要将证书在导入进jdk中(不是说一定要导入jdk,但是最好是导入,因为jdk中还有大 量的其他证书认证,后面会看到tomcat中会配置指向这个证书文件,如果只有该证书,sso跑起来没问题,但是如果有像支付宝之类的其他一些认证找不到 的一些莫名其妙的错误)
keytool -export -alias tomcat-server -storepass changeit -file server.cer -keystore server.keystore得到server.cer,把自己当成客户端在导入证书
keytool -import -trustcacerts -alias server -file server.cer -keystore cacerts -storepass changeit
到这一步之后,就可以服务器和子系统双开做联调了。
(2)关于CAS的源码,要自定义的话需要先将cas的流程走一遍,cas server端采用的spring的webflow。一系列的配置加代码流程非常的清晰,最主要看login-webflow理清流程基本上就可以自己分析出一些开发中遇到的错误和问题了。顺便说一句cas修改源码基本是修改一个小的地方结果发现自己基本上把整个流程的代码都要重写,因为他的代码都不能继承,如果需要拷出来修改完了之后再修改配置文件的引用。所以很蛋疼,不过如果需要修改他的源码一般来说肯定是自己思路出问题了,或者说代码还没有理清楚,很多东西数据都可以从他的配置文件中找到对应的类然后抽取出来。
最后把login的流程给出来:initialFlowSetupAction
ticketGrantingTicketCheck 判断是否已登录,有无已登录票据
gatewayRequestCheck //外来service
serviceAuthorizationCheck 判断外来访问还是直接访问cas
generateLoginTicket 生成访问票据
viewLoginForm 进入登录页面
realSubmit 提交
sendTicketGrantingTicket 发送访问票据
serviceCheck 判断跳转类型
generateServiceTicket 将票据放入response先把这个流程里出来在进行后期的开发效率会很高。所谓各种的ticket跟tcp的握手差不多,类比着很好想。
(3)引入restful,会发现世界瞬间美好了,很多之前你想到的然后去系统各种抽取的东西都可以通过它来做,
直接看cas官网,或者http://stackoverflow.com/questions/22625368/working-java-rest-client-example-to-access-cas-rest-api这篇帖子即可。org.jasig.cas
cas-server-integration-restlet
${cas.version}
runtime org.springframework
spring-webmvc org.springframework
spring-context org.springframework
spring-core restlet
org.restlet.ext.spring.RestletFrameworkServlet
1 restlet
/v1/*(4)开放用户数据的远程调用接口,然后打包给客户端调用。
over~CAS SSO:如何查看并删除JRE信任库中的证书
查看信任库中已有的证书
1
C:\Java\jdk1.6.0_27\bin>keytool -list -
v
-keystore
"C:\Java\jre6\lib\security\cacerts"
根据证书别名删除已有的证书
1
C:\Java\jdk1.6.0_27\bin>keytool -delete -trustcacerts -
alias
tomcat_client -keystore
"C:\Java\jre6\lib\security\cacerts"
SSO之CAS备忘的更多相关文章
- GIS部分理论知识备忘随笔
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.高斯克吕格投影带换算 某坐标的经度为112度,其投影的6度带和3度带 ...
- python序列,字典备忘
初识python备忘: 序列:列表,字符串,元组len(d),d[id],del d[id],data in d函数:cmp(x,y),len(seq),list(seq)根据字符串创建列表,max( ...
- Vi命令备忘
备忘 Ctrl+u:向文件首翻半屏: Ctrl+d:向文件尾翻半屏: Ctrl+f:向文件尾翻一屏: Ctrl+b:向文件首翻一屏: Esc:从编辑模式切换到命令模式: ZZ:命令模式下保存当前文件所 ...
- ExtJs4常用配置方法备忘
viewport布局常用属性 new Ext.Viewport({ layout: "border", renderTo: Ext.getBody(), defaults: { b ...
- [备忘] Automatically reset Windows Update components
这两天遇到Windows 10的更新问题,官方有一个小工具,可以用来修复Windows Update的问题,备忘如下 https://support.microsoft.com/en-us/kb/97 ...
- ECMAScript 5(ES5)中bind方法简介备忘
一直以来对和this有关的东西模糊不清,譬如call.apply等等.这次看到一个和bind有关的笔试题,故记此文以备忘. bind和call以及apply一样,都是可以改变上下文的this指向的.不 ...
- SSO之CAS单点登录实例演示
本文目录: 一.概述 二.演示环境 三.JDK安装配置 四.安全证书配置 五.部署CAS-Server相关的Tomcat 六.部署CAS-Client相关的Tomcat 七. 测试验证SSO 一.概述 ...
- MFC通过txt查找文件并进行复制-备忘
MFC基于对话框的Demo txt中每行一个23位的卡号. 文件夹中包含以卡号命名的图像文件.(fpt或者bmp文件) 要求遍历文件夹,找到txt中卡号所对应的图像文件,并复制出来. VC6.0写的. ...
- php 相关模块备忘
在安装php的时候,不管是编译安装: ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc -- ...
随机推荐
- linux 中 ‘|’的作用
利用Linux所提供的管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入.连续使用管道意味着第一个命令的输出会作为 第二个命令的输入,第二个命令的输出又会作为第三个命令的输入 ...
- 2016031401 - ubuntu显示桌面快捷键
ubuntu显示桌面快捷键设置 步骤如下:系统设置->键盘->快捷键->窗口->最小化窗口 个人设置的是super+D,super就是window下的win键.
- CocoaPods简单使用
CocoaPods的原理 CocoaPods的原理是将所有的依赖库都放到另一个名为Pods的项目中,然后让主项目依赖Pods项目,这样,源码管理工作都从主项目移到了Pods项目中.Pods项目最终会编 ...
- 解决EXC_BAD_ACCESS错误的一种方法--NSZombieEnabled
iOS 程序开发时经常用遇到 EXC_BAD_ACCESS 错误导致 Crash,出现这种错误时一般 Xcode 不会给我们太多的信息来定位错误来源,只是在应用 Delegate 上留下像Thread ...
- JQuery自学代码---(一)
/** * Created by wyl on 15-3-4. */ //Jquery是一个JavaScrioe库,它极大的简化了JavaScript编程 $(document).ready(func ...
- [BZOJ 2721] [Violet 5] 樱花 【线性筛】
题目链接:BZOJ - 2721 题目分析 题目大意:求出 1 / x + 1 / y = 1 / n! 的正整数解 (x, y) 的个数. 显然,要求出正整数解 (x, y) 的个数,只要求出使 y ...
- uva 10881 - Piotr's Ants
这个题的突破点就在于蚂蚁不能够穿过对方,故相对位置不变: 另外,又可以把蚂蚁看成运动方向不变: 代码: #include<cstdio> #include<algorithm> ...
- 修改sphinx最大输出记录数
修改sphinx最大输出记录数 归纳如下: Sphinx的查询默认最大记录数是:1000,而我们想更改这个数值.就需要更改三个地方. 1是更改sphinx.conf配置文件的:max_matches ...
- NAND Flash内部结构简介
介绍 1965年,在双极管被W.Shockley.W.Brattain和J.Bardeen三人发明出来之后,Intel的合作创始人Gordon Moore发现了这样一条法则:当价格不变时,集成 ...
- 程序异常捕获库 - CrashRpt
CrashRpt.dll用来在应用程序出现异常crash时,捕获到错误. 并收集出错信息: MiniDump文件.硬件信息.系统信息.出错信息.进程信息.服务信息.驱动信息.启动信息.软件列表.端口信 ...