Shiro框架2

基本使用

1.环境搭建

引入pom依赖:

复制代码
<dependencies>
    <dependency>
        <groupId>org.apache.shiro</groupId>
        <artifactId>shiro-core</artifactId>
        <version>1.9.0</version>
    </dependency>
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.2</version>
    </dependency>
</dependencies>

说明:Shiro获取权限相关信息可以通过数据库获取,也可以通过ini配置文件获取

这里演示从ini文件中获取。

  • 在resources目录下创建ini文件

注:这里等号左边的(如:zhangsan),就代表用户名。等号右边的(123456)就代表对应的密码。

2.登录认证

2.1登录认证概念

① 身份验证:就是判断一个用户是否为合法用户的处理过程。最常用的简单身份认证方式是系统通过核对用户输入的用户名和口令,看其是否与系统中存储的该用户的用户名和口令一致,来判断用户身份是否正确。

② 在shiro中,用户需要提供principals(身份)和credentials(证明)给shiro,从而应用能验证用户身份;

③ principals:身份,即主体的标识属性,可以是任何属性,如用户名、邮箱等,唯一即可。一个主体可以有多个principals,但只有一个主身份( Primary principals ),一般是用户名/邮箱/手机号。

④ credentials:证明/凭证,即只有主体知道的安全值,如密码/数字证书等。

最常见的principals和credentials组合就是用户名/密码

2.2登录认证基本流程

① 收集用户身份/凭证,即如用户名/密码

② 调用 Subject.login 进行登录,如果失败将得到相应 的 AuthenticationException异常,根据异常提示用户 错误信息;否则登录成功

③ 创建自定义的 Realm 类,继承 org.apache.shiro.realm.AuthenticatingRealm类,实现 doGetAuthenticationInfo() 方法

2.3demo样例

四步走:

  1. 初始化获取SecurityManager
  2. 获取subject对象
  3. 创建token对象,web应用用户名密码从页面传递
  4. 完成登录
java 复制代码
    public static void main(String[] args) {
        //1.创建安全管理器对象
        DefaultSecurityManager securityManager = new DefaultSecurityManager();
        //2.给安全管理器设置realm
        securityManager.setRealm(new IniRealm("classpath:shiro.ini"));
        //3.SecurityUtils给全局安全工具类设置安全管理器
        SecurityUtils.setSecurityManager(securityManager);
        //4.关键对象subject主体
        Subject subject = SecurityUtils.getSubject();
        //5.创建令牌
        UsernamePasswordToken token = new UsernamePasswordToken("zhangsan","123456");
        try {
            System.out.println("认证状态"+subject.isAuthenticated());//false
            //用户认证
            subject.login(token);
            System.out.println("登陆成功");
            System.out.println("认证状态"+subject.isAuthenticated());
        }catch (UnknownAccountException e){
            e.printStackTrace();
            System.out.println("认证失败,用户名不存在");
        }catch (IncorrectCredentialsException e){
            e.printStackTrace();
            System.out.println("认证失败,密码错误");
        }
    }

常见的异常类型

DisabledAccountException(帐号被禁用)

LockedAccountException(帐号被锁定)

ExcessiveAttemptsException(登录失败次数过多)

ExpiredCredentialsException(凭证过期)等

相关推荐
福澤満満4 小时前
网络安全HTML之旅-标签的基本使用
安全
欢璃4 小时前
修电脑日志--电脑开机黑屏只有光标闪
windows·安全·电脑·安全架构
AIwenIPgeolocation5 小时前
数据流通合规新基建 隐私计算平台的三重安全防线
安全
华硕广东7 小时前
电脑被捆绑软件缠上?3 步根治:紧急断网 + 深度清理 + 长效防护
科技·安全·技术美术
TG_yunshuguoji12 小时前
阿里云国际代理商:如何实现配置跨区域复制?
安全·阿里云·云计算
kali-Myon16 小时前
NewStarCTF2025-Week2-Pwn
算法·安全·gdb·pwn·ctf·栈溢出
胡耀超16 小时前
数据安全指南-合规治理 2025 等保2.0测评实施 全球数据保护法规对比 数据分类分级管理 ISO27001与SOC2认证 跨境数据传输合规
安全·数据安全·等保·跨境数据传输合规·数据分类分级管理·等保2.0测评实施·iso27001与soc2认证
腾视科技19 小时前
让安全驾驶有“AI”相伴|腾视科技DMS视频监控一体机,守护每一次出行
人工智能·科技·安全
Better Bench20 小时前
ubuntu20.04安全的安装可穿墙的远程软件parsec
安全·ubuntu·远程·parsec
德迅云安全-小潘21 小时前
蜜罐技术重塑网络安全新格局
安全