shiro 单点登录原理 实例
Shiro 1.2开始提供了Jasig CAS单点登录的支持,单点登录主要用于多系统集成,即在多个系统中,用户只需要到一个中央服务器登录一次即可访问这些系统中的任何一个,无须多次登录。
Jasig CAS单点登录系统分为服务器端和客户端,服务器端提供单点登录,多个客户端(子系统)将跳转到该服务器进行登录验证,大体流程如下:
1、访问客户端需要登录的页面http://localhost:9080/ client/,此时会跳到单点登录服务器https://localhost:8443/ server/login?service=https://localhost:9443/ client/cas;
原因:客户端访问任何地址,都会被shirofilter 拦截,shiro 拦截后发现, 应该会使用authc 进行认证 发现用户没有登录,所以会跳转到 shiroFilter 配置的loginUrl 页面
2、如果此时单点登录服务器也没有登录的话,会显示登录表单页面,输入用户名/密码进行登录;
3、登录成功后服务器端会回调客户端传入的地址:https://localhost:9443/client/cas?ticket=ST-1-eh2cIo92F9syvoMs5DOg-cas01.example.org,且带着一个ticket;
4、客户端会把ticket提交给服务器来验证ticket是否有效;如果有效服务器端将返回用户身份;
解释:这个时候 访问/cas就会被casFileter 拦截 ,casFilter 内部创建 带ticket 的token,然后 调用subject.login方法,这时候 继承casRealm 的myrealm 进行处理。
默认认证机制 会去服务器端进行ticket 验证。
5、客户端可以再根据这个用户身份获取如当前系统用户/角色/权限信息。
服务器端
我们使用了Jasig CAS服务器v4.0.0-RC3版本,可以到其官方的github下载:https://github.com/Jasig/cas/tree/v4.0.0-RC3下载,然后将其cas-server-webapp模块封装到shiro-example-chapter15-server模块中,具体请参考源码。
1、数字证书使用和《第十四章 SSL》一样的数字证书,即将localhost.keystore拷贝到shiro-example-chapter15-server模块根目录下;
2、在pom.xml中添加Jetty Maven插件,并添加SSL支持:
