01. shiro源码解读(一) 您所在的位置:网站首页 securitymanager有什么用 01. shiro源码解读(一)

01. shiro源码解读(一)

2023-04-08 23:34| 来源: 网络整理| 查看: 265

1. DefaultSecurityManager [类] 1.1 DefaultSecurityManager 的继承关系

image.png

1.1.1 DefaultSecurityManager的无参构造方法

image.png

/** * Default no-arg constructor. */ public DefaultSecurityManager() { super(); this.subjectFactory = new DefaultSubjectFactory(); this.subjectDAO = new DefaultSubjectDAO(); } 复制代码 RealmSecurityManager [类] 1.2 setRealm()方法

realm英文原意:领域、场所

Realm即领域,相当于datasource数据源,securityManager进行安全认证需要通过Realm获取用户权限数据,比如:如果用户身份数据在数据库那么realm就需要从数据库获取用户身份信息。

注意:不要把realm理解成只是从数据源取数据,在realm中还有认证授权校验的相关的代码。

设置单个realm

public void setRealm(Realm realm) { if (realm == null) { throw new IllegalArgumentException("Realm argument cannot be null"); } Collection realms = new ArrayList(1); realms.add(realm); setRealms(realms); } 复制代码

setRealm(Realm realm) 的参数列表里需要一个Realm

此Realm 是一个接口。

image.png image.png

1.3 Realm [接口] 1.3.1 查看Realm接口的所有实现类

image.png

1.4 IniRealm [类]

image.png

IniRealm 中有一个有参构造方法

这个有参构造方法,一般是将我们shirio.ini文件设置进去。

public IniRealm(String resourcePath) { this(); Ini ini = Ini.fromResourcePath(resourcePath); this.ini = ini; this.resourcePath = resourcePath; processDefinitions(ini); } 复制代码

image.png

DefaultSecurityManager可以设置setRealm

DefaultSecurityManager可以设置setRealm

// 1. 初始化shiro的安全管理器 DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager(); // 2. 设置用户的权限信息到安全管理器 Realm realm = new IniRealm("classpath:shirio.ini"); defaultSecurityManager.setRealm(realm); 复制代码

但是看看继承关系 image.png

setRealm() 方法是类 RealmSecurityManager中的方法,为什么能调用呢?

因为DefaultSecurityManager 继承了RealmSecurityManager,就可以调用RealmSecurityManager类中的方法。

UsernamePasswordToken

在创建token令牌,记录用户认证的身份和凭证即账号和密码的时候,会用到UsernamePasswordToken类,它有一个接口AuthenticationToken,我们一般都是

AuthenticationToken usernamePasswordToken = new UsernamePasswordToken(username,password); 复制代码

image.png



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有