当前位置:

首页 > 软件教程 > Shiro教程2:自定义Realm详解

Shiro教程2:自定义Realm详解

Windows 11
Windows 11

Windows 11 是微软全新操作系统,现代化界面,流畅操作体验,适用于学习、工作与日常生活。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

立即下载
¥159
Windows 2026-08-22
正版软件 Windows 操作系统 Windows 11 Windows下载

通过Shiro教程1,我们了解到仅仅在ini文件中定义数据源信息与实际开发环境存在较大的不兼容性,因此我们希望能够自定义Realm。实现自定义Realm的步骤如下:创建自定义Realm的Java类:新建一个Java文件,继承AuthorizingRealm类,并重写两个抽象方法。/***自定义的Realm*@authordengp*/publicclassMyRealmextendsAuthorizingRealm{/***认证方法*@paramtoken就

本文目录

    通过Shiro教程1,我们了解到仅仅在ini文件中定义数据源信息与实际开发环境存在较大的不兼容性,因此我们希望能够自定义Realm。

    实现自定义Realm的步骤如下:

    1. 创建自定义Realm的Java类:新建一个Java文件,继承AuthorizingRealm类,并重写两个抽象方法。
    /**
     * 自定义的Realm
     * @author dengp
     */
    public class MyRealm extends AuthorizingRealm {
    
    /**
     * 认证方法
     * @param token 就是我们在测试代码中定义的UsernamePasswordToken对象
     * 有我们保存的需要验证的账号密码信息
     */
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
        // 获取账号信息
        String principal = (String) token.getPrincipal();
    
        // 正常逻辑此处应该根据账号去数据库中查询,此处我们默认账号为 root 密码123456
        // 验证账号
        if(!"root".equals(principal)){
            // 账号错误
            return null;
        }
    
        String pwd = "123456";
    
        // 验证密码
        AuthenticationInfo info = new SimpleAuthenticationInfo(principal, pwd, "myrealm");
        return info;
    }
    
    /**
     * 授权方法
     */
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
        // TODO Auto-generated method stub
        return null;
    }

    }

    shiro教程2(自定义Realm)

    1. 配置ini.xml文件:
    [main]

    自定义 realm

    customRealm=com.dpb.realm.MyRealm

    将realm设置到securityManager

    securityManager.realms=$customRealm

    1. 测试:测试代码与上个案例完全相同。
    @Test
    public void test() {
    // 1.获取SecurityManager工厂对象
    Factory factory = new IniSecurityManagerFactory("classpath:shiro.ini");

    // 2.通过Factory对象获取SecurityManager对象
    SecurityManager securityManager = factory.getInstance();
    
    // 3.将SecurityManager对象添加到当前运行环境中
    SecurityUtils.setSecurityManager(securityManager);
    
    // 4.获取Subject对象
    Subject subject = SecurityUtils.getSubject();
    
    AuthenticationToken token = new UsernamePasswordToken("root1", "12345");
    
    // 登录操作
    try {
        subject.login(token);
    } catch (UnknownAccountException e) {
        System.out.println("账号出错...");
    } catch(IncorrectCredentialsException e){
        System.out.println("密码出错...");
    }
    
    // 获取登录的状态
    System.out.println(subject.isAuthenticated());

    }

    shiro教程2(自定义Realm)shiro教程2(自定义Realm)shiro教程2(自定义Realm)

    原理分析:

    • 为什么要继承AuthorizingRealm?

    在上个教程中,我们完整地分析了认证的流程,发现认证过程的核心代码是:

    shiro教程2(自定义Realm)

    核心方法是doGetAuthenticationInfo(token),在Realm的结构中:

    shiro教程2(自定义Realm)

    AuthorizingRealm和AuthenticatingRealm都提供了doGetAuthenticationInfo(token)的抽象方法。但是AuthenticatingRealm中需要重写的抽象方法太多,而AuthorizingRealm只需要重写两个方法,且这两个方法都是我们需要使用的。因此选择继承AuthorizingRealm。

    • 自定义的Realm什么时候被调用?

    shiro教程2(自定义Realm)

    • 密码验证什么时候执行?

    注意:自定义Realm中只完成了账号的认证。密码认证还是在AuthenticatingRealm中完成的,只是我们在自定义Realm中完成了密码的设置。

    shiro教程2(自定义Realm)shiro教程2(自定义Realm)shiro教程2(自定义Realm)

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    软件教程 Windows
    相关文章 更多
    开机提示找不到启动设备或Operating System not found
    开机提示找不到启动设备或Operating System not found

    电脑开机提示找不到启动设备?本教程指导你检查硬盘连接、在BIOS中确认Windows Boot Manager启动顺序,并通过Windows恢复环境运行启动修复,快速解决引导问题。

    开机蓝屏并显示错误代码的修复方法
    开机蓝屏并显示错误代码的修复方法

    遇到Windows开机蓝屏?先记录错误代码,进入恢复环境的安全模式,卸载最近的驱动程序或质量更新,重启验证系统是否恢复正常。

    电脑卡在品牌Logo界面或无限重启
    电脑卡在品牌Logo界面或无限重启

    电脑开机卡在Logo界面或陷入重启循环?本文指导你通过移除外设、重置BIOS启动项及运行系统启动修复来解决问题,快速恢复电脑正常引导。

    电脑截图快捷键没反应:检查Fn锁定与驱动冲突
    电脑截图快捷键没反应:检查Fn锁定与驱动冲突

    当Win+Shift+S或PrtSc键失效时,本文指导用户逐步检查键盘Fn锁定状态、更新键盘驱动程序以及排查第三方软件的热键拦截,快速恢复截图功能。

    Windows更新后开机黑屏,进入安全模式卸载补丁或回滚驱动
    Windows更新后开机黑屏,进入安全模式卸载补丁或回滚驱动

    Windows更新后遭遇开机黑屏?本指南详解如何通过自动修复进入Windows恢复环境,在安全模式中卸载导致故障的质量或功能更新,并回滚显示适配器驱动。包含BitLocker密钥备份提醒及系统还原等备选方案,帮助用户快速恢复桌面正常显示。

    电脑蓝屏后怎么紧急重启并保护未保存数据
    电脑蓝屏后怎么紧急重启并保护未保存数据

    本文介绍Windows电脑蓝屏后的正确处理流程:包括记录停止代码、执行安全重启、进入恢复环境进行启动修复或进入安全模式,以及如何在系统不稳定时保护未保存的重要数据。适用于遇到系统崩溃担心数据丢失的用户。

    电脑黑屏只有鼠标光标怎么办
    电脑黑屏只有鼠标光标怎么办

    解决Windows电脑登录后黑屏但鼠标可动的问题,通过任务管理器重启桌面进程或进入安全模式卸载近期安装的冲突软件,快速恢复桌面显示。

    电脑睡眠唤醒后黑屏无法点亮,关闭快速启动并更新显卡驱动
    电脑睡眠唤醒后黑屏无法点亮,关闭快速启动并更新显卡驱动

    电脑睡眠唤醒后黑屏怎么办?本教程指导您通过关闭Windows快速启动功能和更新显卡驱动程序,解决因电源状态保存错误导致的显示信号丢失问题,操作简单,效果立竿见影。

    更新驱动或系统后出现蓝屏的卸载与回滚方法
    更新驱动或系统后出现蓝屏的卸载与回滚方法

    本文指导用户在遭遇Windows蓝屏死机后,如何正确记录错误信息、执行安全重启并进入恢复环境。通过启动修复、安全模式等方法保护未保存文件,并提供后续排查建议,避免因操作不当导致数据丢失或系统损坏。

    Windows12配置要求公布后怎么查电脑能否升级?检查步骤整理
    Windows12配置要求公布后怎么查电脑能否升级?检查步骤整理

    面对Windows12配置要求,别只盯着内存看。本文教你在Win11中准确记录处理器型号、磁盘剩余空间、TPM版本及安全启动状态,建立完整的设备档案,待官方标准明确后快速对照,避免盲目升级或误判兼容性。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。

    即将离开本站
    您即将前往第三方网站,请确认是否继续?