SSO之CAS备忘

来源:互联网 发布:阿里云服务器下载文件 编辑:程序博客网 时间:2024/05/21 03:20

    自己负责的公司基于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证书

点击(此处)折叠或打开

  1. <Connector
  2.     SSLEnabled="true"
  3.     clientAuth="false"
  4.     keystoreFile="G:/apache-tomcat-7.0.47/conf/server.keystore"
  5.     keystorePass="changeit"
  6.     maxThreads="150"
  7.     port="8443"
  8.     protocol="HTTP/1.1"
  9.     scheme="https"
  10.     secure="true"
  11.     sslProtocol="TLS"
  12.     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的流程给出来:

点击(此处)折叠或打开

  1. initialFlowSetupAction
  2. ticketGrantingTicketCheck 判断是否已登录,有无已登录票据
  3. gatewayRequestCheck //外来service
  4. serviceAuthorizationCheck 判断外来访问还是直接访问cas
  5. generateLoginTicket 生成访问票据
  6. viewLoginForm 进入登录页面
  7. realSubmit 提交
  8. sendTicketGrantingTicket 发送访问票据
  9. serviceCheck 判断跳转类型
  10. generateServiceTicket 将票据放入response
先把这个流程里出来在进行后期的开发效率会很高。所谓各种的ticket跟tcp的握手差不多,类比着很好想。
(3)引入restful,会发现世界瞬间美好了,很多之前你想到的然后去系统各种抽取的东西都可以通过它来做,
直接看cas官网,或者http://stackoverflow.com/questions/22625368/working-java-rest-client-example-to-access-cas-rest-api这篇帖子即可。
<dependency>        <groupId>org.jasig.cas</groupId>        <artifactId>cas-server-integration-restlet</artifactId>        <version>${cas.version}</version>        <scope>runtime</scope>        <exclusions>            <exclusion>                <groupId>org.springframework</groupId>                <artifactId>spring-webmvc</artifactId>            </exclusion>            <exclusion>                <groupId>org.springframework</groupId>                <artifactId>spring-context</artifactId>            </exclusion>            <exclusion>                <groupId>org.springframework</groupId>                <artifactId>spring-core</artifactId>            </exclusion>        </exclusions>    </dependency>
 <servlet>        <servlet-name>restlet</servlet-name>        <servlet-class>org.restlet.ext.spring.RestletFrameworkServlet</servlet-class>        <load-on-startup>1</load-on-startup>    </servlet>    <servlet-mapping>        <servlet-name>restlet</servlet-name>        <url-pattern>/v1/*</url-pattern>    </servlet-mapping> 
(4)开放用户数据的远程调用接口,然后打包给客户端调用。
over~



<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(45) | 评论(0) | 转发(0) |
0

上一篇:Linux访问Windows共享文件夹

下一篇:spring + maven + cxf

相关热门文章
  • 欢迎cck114在ChinaUnix博客安...
  • 欢迎XQH520在ChinaUnix博客安...
  • 欢迎fzxy7788在ChinaUnix博客...
  • 欢迎blog_tw在ChinaUnix博客安...
  • 欢迎aiguocc在ChinaUnix博客安...
  • JDK1.6官方下载_JDK6官方下载_...
  • MyEclipse6.5下载及注册码...
  • Eclipse 插件安装、升级和卸载...
  • Eclipse+MyEclipse的配置
  • java.net.BindException: Addr...
  • 谁能够帮我解决LINUX 2.6 10...
  • 现在的博客积分不会更新了吗?...
  • shell怎么读取网页内容...
  • ssh等待连接的超时问题...
  • curl: (56) Recv failure: Con...
给主人留下些什么吧!~~
原创粉丝点击