shiro单点登录原理_Shiro单点登录之集成CAS

参阅《跟我学shiro》—— 张开涛

配置CAS服务器

CAS服务器默认是不对外提供认证服务的,也就是说如果我们的应用需要使用CAS服务器做认证,必须在CAS服务器中开启认证服务,为我们的客户端应用提供认证,如果没有配置,使用我们的应用在进行认证时会抛出异常,如下:

访问异常

所以我们需要修改配置,使服务允许访问我们的CAS服务器,如下:

//1. 修改application.properties

# 表示会从json文件中读取服务配置,其他配置

# 更多请看 https://apereo.github.io/cas/5.2.x/installation/Configuration-Properties.html#service-registry

cas.serviceRegistry.initFromJson=true

//2. 修改 cas\WEB-INF\classes\services\HTTPSandIMAPS-10000001.json 使其支持 http应用的访问CAS服务端,参与单点登录

{

"@class" : "org.apereo.cas.services.RegexRegisteredService",

"serviceId" : "^(https|imaps|http)://.*",

"name" : "HTTPS and IMAPS",

"id" : 10000001,

"description" : " support HTTPS and IMAPS and HTTP protocols.",

"evaluationOrder" : 10000

}

// 3. 设置ticket过期时间

cas.ticket.tgt.maxTimeToLiveInSeconds=28800

cas.ticket.tgt.timeToKillInSeconds=7200

访问结果

生成证书,并且导入到jdk的证书库

(1)生成秘钥:keytool -genkey -keystore "G:\localhost.keystore" -alias localhost -keyalg RSA,注意,"您的名字与姓氏下方",必须填写你要访问的域名,如果是本地,使用localhost即可。在这里使用上一节生成的 localhost.keyStore即可

生成秘钥

(2)导出证书:keytool -export -alias localhost -file G:\localhost.crt -keystore G:\localhost.keystore

(3)将证书导入到jdk的证书库(进入 jre/lib/security目录下)

keytool -import -trustcacerts -alias localhost -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -file g:/localhost.crt -storepass changeit

配置客户端

在shiro官网中,对集成 CAS 有更详细的描述。

(1)添加相关依赖

org.apache.shiro

shiro-cas

1.5.2

(2)配置 CasFilter 类,用来拦截回调请求,获取的票据,然后封装成需要认证的 CasToken。

// 拦截请求,重定向到 CAS服务器

/cas = cas

/** = authc

(3)配置 CasRealm ,该类使用 ssl 方式向 CAS服务器验证 CasToken的有效性,然后返回对应的认证信息。

//1. 继承 CasRealm 实现自己逻辑

public class MyCasRealm extends CasRealm {

private Logger logger = LoggerFactory.getLogger(MyCasRealm.class);

@Override

// 验证 token 的有效性都封装在 CasRealm的 doGetAuthenticationInfo 方法中

protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {

Object principal = token.getPrincipal();

logger.info("使用{}用户进行登录", principal);

return super.doGetAuthenticationInfo(token);

}

@Override

protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {

Object primaryPrincipal = principals.getPrimaryPrincipal();

logger.info("从数据库中查询{}用户的权限信息", primaryPrincipal);

SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();

authorizationInfo.addStringPermission("user:read");

authorizationInfo.addRole("admin");

return authorizationInfo;

}

}

//2. 告诉CasRealm 的CAS服务器地址和回调地址

//3. 将该 Realm 配置到 SecurityManager 中

重定向到CAS服务器

(2)输入用户名和密码开始登录

认证完成

登录完成

CAS的流程可以看cas原理,讲的很详细。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值