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信任库中的证书
查看信任库中已有的证书
1C:\Java\jdk1.6.0_27\bin>keytool -list -v-keystore"C:\Java\jre6\lib\security\cacerts"
根据证书别名删除已有的证书
1C:\Java\jdk1.6.0_27\bin>keytool -delete -trustcacerts -aliastomcat_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 -- ...
随机推荐
- Vim粘贴代码时缩进混乱
Vim粘贴代码时缩进混乱 via 背景 在终端Vim中粘贴代码时,发现插入的代码会有多余的缩进,而且会逐行累加.原因是终端把粘贴的文本存入键盘缓存(Keyboard Buffer)中,Vim则把这些内 ...
- Things About 'extern'
Note: All Learned From Here C和Objective-C的function前面都有个隐含的extern,对于function来说,有没有extern都无所谓,但变量不一样. ...
- 监听div内容改变
做前端突击队,外星人那道是自己手动模拟那个时间的变化的,但正确思路应该是监听div内容的变化然后同步到输入框中,遂今天找了一下,结果如下: $('div').bind('DOMNodeInserted ...
- Manacher 算法-----o(n)回文串算法
回文的含义是:正着看和倒着看相同,如abba和yyxyy Manacher算法基本要点:用一个非常巧妙的方式,将所有可能的奇数/偶数长度的回文子串都转换成了奇数长度:在每个字符的两边都插 ...
- 排名第一、第二的OCR软件
排名第一.第二的OCR软件 第一:ABBYY FineReader OCR世界排名第一,在俄罗斯获国际科技大奖奖超过卡巴斯基! 不仅仅只是文字识别,还能表格识别,版面还原,字体识别,文档结构 ...
- js获取域名的方法
本文实例讲述了js获取域名的方法.分享给大家供大家参考.具体实现方法如下: 复制代码代码如下: <script>//获取域名var k_host = window.location.hos ...
- django开发总结:
一,关于setting目录中的“DEBUG” DEBUG=False 把DEBUG从True改成False后就会出现(必需指定404和500错语页面,如上图的目录结构)找不到页面的错误.原因是DEBU ...
- 安装ECMall后报PHP Strict Standards错误,请问如何解决
Strict Standards: Non-static method ECMall::startup() should not be called statically in /htdocs/ecm ...
- [wikioi]没有上司的舞会
树形DP.用F[k][0]和F[k][1]表示某节点不选和选了之后子树的最大值.那么:f[i][0]=sigma(max(f[k][0],f[k][1]))f[i][1]=sigma(f[k][0]) ...
- 6,render的一些概念和可用库
一,概念解释 什么是渲染?这是高大上的说法,翻译成正常语言,就是把图像缓冲区的数据显示到屏幕的过程,就是渲染. 原理说白了很简单,但实际操作中有太多因素需要考量. OS/硬件提供的加速机制/解码后图像 ...

