shrio+cas实现单点登录

     之前做过单点登录,方式是通过redis存储token,本地浏览器加载cookie的方式验去redis验证,形式是跨域,如httpclient或者dubbo等方式。但是总感觉这种方式比较小家子气。于是研究了一下shiro的单点登录。

shiro+CAS方式实现单点登录

代码地址:

[email protected]:oulexue/shiro-sso.git

一、环境配置

 1.需要使用CAS提供的项目(cas-server中的),下载地址:

http://developer.jasig.org/cas/

版本选3.5.1或者3.5.2均可,建议别太新

shrio+cas实现单点登录_第1张图片
下载

解压后的目录,我们需要两个项目:

cas-server-webapp(单点登录系统):

cas-server-support-jdbc:数据库配置模块:配置我们的数据库,加入cas-server-webapp依赖

shrio+cas实现单点登录_第2张图片
cas目录结构

这两个项目都是源码包(maven版),把它们导入到到eclipse,直接构建


shrio+cas实现单点登录_第3张图片

直接运行单点系统(cas-server-webapp)或者打war包,放在tomcat下改名为cas,然后启动访问:http://ip:8080/cas


shrio+cas实现单点登录_第4张图片



第一步、MySQL创建数据库和表,(主要是用户表,因为我们主要是研究单点登录)

shrio+cas实现单点登录_第5张图片

2.设置数据库和表(使用mysql),主要是用户表,我们只研究单点登录

在cas-server-webapp下添加mysql相关的jar


shrio+cas实现单点登录_第6张图片

maven环境如果缺少插件,自行下载(可参考代码中的pom文件,在这里不多说)

修改deployerConfigContext.xml配置文件

首先增加一个datasource,通过增加一下的代码实现:


shrio+cas实现单点登录_第7张图片

重启tomcat,就可以用数据库中的用户进行登录了

3.tomcat添加https安全协议

  这一步比较重要,如果出错,后面将会出现各种错误

第一步:制作密钥

切换到jdk的bin目录下,执行下面的命令

keytool -genkey -alias tomcat -keystore mykeystore -keyalg RSA -validity 2000


shrio+cas实现单点登录_第8张图片

   注意:“名字与姓氏”应该是域名(如localhost),输成了姓名,和真正运行的时候域名不符,会出问题

   口令随意设置,后面会使用

接着执行导出

keytool -export -alias tomcat -keystore mykeystore -file server.crt


接着再导入到jdk的安全目录下(注意:要导入到jdk下面的jre目录下,不是单独的jre那个目录,我们使用的是jdk7,后面项目因为要使用SSL协议,全部都使用这个jdk)

keytool -import -alias tomcat -file server.crt -keystore e:/java/jdk7/jre/lib/security/cacerts


shrio+cas实现单点登录_第9张图片

第二步:配置tomcat服务器

定位到tomcat服务器的安装目录, 找到conf下的server.xml文件

找到如下图位置


shrio+cas实现单点登录_第10张图片

取消注释,修改为如下:

注意:keystorefile不是jre/lib下cacerts文件


到此环境搭建完成

二、项目开发

随意找两个我们之前开发的shiro项目,稍加改动,然后进行单点登录测试

一、导入jar

除了shiro相关的jar外,要单独再加一个shiro-cas包


shrio+cas实现单点登录_第11张图片

修改spring-shiro.xml配置文件

修改的地方(详情看注释):

shiroDbRealm:casServerUrlPrefix和casService

shiroFilter:loginUrl和filters

casFilter

logoutFilter

casSubjectFactory

securityManager:subjectFactory

shrio+cas实现单点登录_第12张图片

相关的路径在shiro.properties

shiro.loginUrl=https://localhost/cas/login?service=http://localhost:8082/shiro-cas

shiro.logoutUrl=https://localhost/cas/logout?service=http://localhost:8082/shiro-cas

shiro.cas.serverUrlPrefix=https://localhost/cas

shiro.cas.service=http://localhost:8082/shiro-cas

shiro.failureUrl=/login

shiro.successUrl=/index

改完后复制一个项目,改改项目名,和发布端口号

两个项目路径分别为:

http://localhost:8081

http://localhost:8082

接下来测试,登录任一系统,跳转至cas系统认证,认证通过后,其他系统无须重新登录。注销任何一个系统。其他系统也会注销,需要再重新登录

演示略

结束

你可能感兴趣的:(shrio+cas实现单点登录)