千家信息网

Shiro中的Realm怎么使用

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这篇文章主要介绍"Shiro中的Realm怎么使用",在日常操作中,相信很多人在Shiro中的Realm怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Shiro
千家信息网最后更新 2025年12月02日Shiro中的Realm怎么使用

这篇文章主要介绍"Shiro中的Realm怎么使用",在日常操作中,相信很多人在Shiro中的Realm怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Shiro中的Realm怎么使用"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Realm的继承关系

通过查看类的继承关系,我们发现 Realm 的子类实际上有很多种,这里我们就来看看有代表性的几种:

1.IniRealm

可能我们并不知道,实际上这个类在我们第二篇文章中就已经用过了。这个类一开始就有如下两行定义:

public static final String USERS_SECTION_NAME = "users";
public static final String ROLES_SECTION_NAME = "roles";

这两行配置表示 shiro.ini 文件中,[users] 下面的表示表用户名密码还有角色,[roles] 下面的则是角色和权限的对应关系。

2.PropertiesRealm

PropertiesRealm 则规定了另外一种用户、角色定义方式,如下:

user.user1=password,role1 role.role1=permission1

3.JdbcRealm

这个顾名思义,就是从数据库中查询用户的角色、权限等信息。打开 JdbcRealm 类,我们看到源码中有如下几行:

protected static final String DEFAULT_AUTHENTICATION_QUERY = "select password from users where username = ?";
protected static final String DEFAULT_SALTED_AUTHENTICATION_QUERY = "select password, password_salt from users where username = ?";
protected static final String DEFAULT_USER_ROLES_QUERY = "select role_name from user_roles where username = ?";
protected static final String DEFAULT_PERMISSIONS_QUERY = "select permission from roles_permissions where role_name = ?";

根据这几行预设的 SQL 我们就可以大致推断出数据库中表的名称以及字段了,当然,我们也可以自定义 SQL。JdbcRealm 实际上是 AuthenticatingRealm 的子类,关于 AuthenticatingRealm 我们在后面还会详细说到,这里先不展开。接下来我们就来详细说说这个 JdbcRealm。

JdbcRealm

1.准备工作

使用 JdbcRealm,涉及到数据库操作,要用到数据库连接池,这里我使用 Druid 数据库连接池,因此首先添加如下依赖:


com.alibaba
druid
RELEASE


mysql
mysql-connector-java
5.1.27

2.数据库创建

想要使用 JdbcRealm,那我首先要创建数据库,根据 JdbcRealm 中预设的 SQL,我定义的数据库表结构如下:

p309

这里为了大家能够直观的看到表的关系,我使用了外键,实际工作中,视情况而定。然后向表中添加几条测试数据。数据库脚本小伙伴可以在 github 上下载到(https://github.com/lenve/shiroSamples/blob/v4/shiroDemo.sql)。

3.配置文件处理

然后将 shiro.ini 中的所有配置注释掉,添加如下注释:

jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm
dataSource=com.alibaba.druid.pool.DruidDataSource
dataSource.driverClassName=com.mysql.jdbc.Driver
dataSource.url=jdbc:mysql://localhost:3306/shiroDemo
dataSource.username=root
dataSource.password=123
jdbcRealm.dataSource=$dataSource
jdbcRealm.permissionsLookupEnabled=true
securityManager.realms=$jdbcRealm

这里的配置文件都很简单,不做过多赘述,小伙伴唯一需要注意的是 permissionsLookupEnabled 需要设置为 true,否则一会 JdbcRealm 就不会去查询权限用户权限。

4.测试

OK,做完上面几步就可以测试了,测试方式和第二篇文章中一样,我们可以测试下用户登录,用户角色和用户权限。

5.自定义查询 SQL

小伙伴们看懂了上文,对于自定义查询 SQL 就没什么问题了。我这里举一个简单的例子,比如我要自定义 authenticationQuery 对对应的 SQL,查看 JdbcRealm 源码,我们发现 authenticationQuery 对应的 SQL 本来是 select password from users where username = ? ,如果需要修改的话,比如说我的表名不是 users 而是 employee,那么在 shiro.ini 中添加如下配置即可:

jdbcRealm.authenticationQuery=select password from employee where username = ?

到此,关于"Shiro中的Realm怎么使用"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

数据 数据库 用户 权限 角色 测试 配置 实际 学习 查询 实际上 小伙 小伙伴 文件 篇文章 接下来 子类 方式 更多 注释 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 前锦网络技术公司是做什么的 智能网络技术与应用 编程工作与数据库工作 浏览器用流量打开服务器异常 常用软件开发方法有 怎么设置有线联通服务器 顺义区综合网络技术推广服务保障 北京六度畅游网络技术 桂林二更互动网络技术有限公司 软件开发详细设计lld sql5.5数据库表的创建 软件开发和芯片破解有有什么区别 数据库是独立的还是共享的 崇明区本地软件开发售后保障 wto关税下载数据库 成都郫县棋牌软件开发官方 如何运用数据库分类汇总 数据库连接数过大的优化 软件开发费用很高吗 贵州华通网络技术有限公司 常规软件开发条件 uniapp使用本地数据库 苏州万户网络技术有限公司 网络安全六字标语 靖江进口网络技术哪家好 燃烧的远征服务器金价 我的世界租借服务器管理员权限 阿里云云服务器安全组 服务器设置无法打开 盛景网络技术开发有限公司
0