Shiro框架学习笔记(二)基于内置ini文件的身份认证

简介: Shiro框架学习笔记(二)基于内置ini文件的身份认证

一开始学习我们先从简单的开始学习,先不从数据库中取数据来进行交互检测,先通过内置一个shiro.ini文件来进行简单的身份验证。

shiro.ini文件如下:


#定义⽤户信息
#格式:⽤户名=密码,⻆⾊1,⻆⾊2,....
[users]
zhangsan=123,admin
lisi=456,manager,seller
wangwu=789,clerk
# -----------------------------------------------------------------------------
# ⻆⾊及其权限信息
# 预定权限:user:query
# user:detail:query
# user:update
# user:delete
# user:insert
# order:update
# ....
[roles]
# admin 拥有所有权限,⽤*表示
admin=*
# clerk 只有查询权限
clerk=user:query,user:detail:query
# manager 有 user 的所有权限
manager=user:*

shiro.ini文件位置如下


20200701204806674.png

我们先通过控制台程序先测试,之后会集成到web项目中,接下来就是程序代码:


// 定义main函数测试效果
// 创建 "SecurityFactory",加载ini配置,并通过它创建SecurityManager
Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
SecurityManager securityManager = factory.getInstance();
// 将SecurityManager托管到SecurityUtils⼯具类中(ops:之后可以不必关⼼SecurityManager)
//因为直接操作SecurityManager太复杂、易出错。
SecurityUtils.setSecurityManager(securityManager);
// 获得Subject,通过subject可以执⾏shiro的相关功能操作(身份认证或权限校验等)
//几乎所有操作,除了加密,因为加密是其他模块,可以在架构图看到。每次创建了subject都会从session中同步一下信息。直接由用户使用,调用功能简单,其底层调用Securitymanager的相关流程
Subject currentUser = SecurityUtils.getSubject();
// 身份认证( 类似登录逻辑 )
if (!currentUser.isAuthenticated()) {//判断是否已经登录
    //如果未登录,则封装⼀个token,其中包含 ⽤户名和密码
    //这里是我们的主要测试步骤,读者们可以通过简单修改用户名和密码来进行一般的检测
    UsernamePasswordToken token = new UsernamePasswordToken("zhangsan", "123");
    try {
        //将token传⼊login⽅法,进⾏身份认证 (判断⽤户名和密码是否正确)
        currentUser.login(token);//如果失败则会抛出异常
    } catch (UnknownAccountException uae) {//⽤户不存在
        System.out.println("There is no user with username of " + token.getPrincipal());
    } catch (IncorrectCredentialsException ice) {//密码错误
        System.out.println("Password for account " + token.getPrincipal() + " was incorrect!");
    } catch (LockedAccountException lae) {//账户冻结,例如多次登陆
        System.out.println("The account for username " 
                   + token.getPrincipal() 
                   + " is locked. Please contact your administrator to unlock it.");
    }catch (AuthenticationException ae) {//其他认证异常
    }
}
// 认证成功则⽤户信息会存⼊ currentUser(Subject)
System.out.println("User [" + currentUser.getPrincipal() + "] logged in successfully.");
// ⽤户退出,会清除⽤户状态 身份信息,登录状态信息,权限信息,角色信息,会话信息 全部抹除
currentUser.logout();
// System.exit(0);


主要是先创建SecurityManager对象,之后将该对象交由SecurityUtils来进行管理,之后在进行身份验证时主要是通过获取SecurityUtils获取到当前的登录用户,之后通过该用户的用户名以及密码创建相应的令牌,之后通过subject.login(token)来实现身份的验证,不再像之前一样进行复杂的sql语句的验证。



相关文章
|
安全 Java API
Shiro 身份认证绕过漏洞 CVE-2022-32532
Apache Shiro 是一个强大且易用的 Java 安全框架,通过它可以执行身份验证、授权、密码和会话管理。使用 Shiro 的易用 API,您可以快速、轻松地保护任何应用程序 —— 从最小的移动应用程序到最大的 WEB 和企业应用程序。
458 0
Shiro 身份认证绕过漏洞 CVE-2022-32532
|
缓存 安全 Apache
2021年你还不会Shiro?----3.分析身份认证源码实现自定义Realm
我们已经知道无论我们是认证还是授权,数据的获取都是来源于Realm,Realm就相当于我们的datasource,在上一篇中我们使用的是用IniRealm来加载我们的配置文件shiro.ini,同时我们也说了ini只是临时解决方案,在实际的开发中是不可能把用户信息和权限信息放在ini文件中的,都是来源于数据库,那么系统提供的IniRealm就不能满足我们的需要了,我们就需要自定义Realm来实现真正的场景,事实上ini文件也只是apache为我们提供学习使用的策略,下面我们就来看下怎么自己定义一个Realm。
115 0
2021年你还不会Shiro?----3.分析身份认证源码实现自定义Realm
|
存储 缓存 安全
2021年你还不会Shiro?----2.Shiro实现登录功能(身份认证实践)
上一篇介绍了Shiro的架构,我们可以发现Shiro核心的东西并不多,我们花个几分钟就可以把Shiro的机构记清楚,其中Security Manager就是Shiro的核心,他包含了身份认证器Authenticator、授权器Authorizer、Session管理Session Manager、缓存管理Cache Manager。这一篇我们就介绍下Shiro的身份认证的过程,也就是我们说的用户登录。
152 0
2021年你还不会Shiro?----2.Shiro实现登录功能(身份认证实践)
|
存储 缓存 安全
Apache Shiro身份认证过程详解
Apache Shiro身份认证过程详解
265 0
Apache Shiro身份认证过程详解
|
数据库 数据安全/隐私保护
Shiro身份认证之principals和credentials
Shiro身份认证之principals和credentials
343 0
|
Apache 容器
菜鸟学习shiro之入门的简单登录认证和身份认证1
最近学习了四郎,学的是天南海北,一头雾水,概念懂了,实践呐,就很是缺乏,于是跟着慕课网的视频教程敲敲代码 果然加深了理解,话不多说,直接看代码 Maven的依赖: log4j log4j 1.
1454 0
|
安全 Java 数据安全/隐私保护
Shiro之身份认证、与spring集成(入门级)
目录 1. Shro的概念 2. Shiro的简单身份认证实现 3. Shiro与spring对身份认证的实现   前言:   Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在 JavaSE 环境,也可以用在 JavaEE 环境。
1656 0
|
Web App开发 缓存 Java
SpringBoot学习:整合shiro(身份认证和权限认证),使用EhCache缓存
项目下载地址:http://download.csdn.NET/detail/aqsunkai/9805821 (一)在pom.xml中添加依赖:   [html] view plain copy          1.
3244 0
|
30天前
|
安全 Java 测试技术
ToB项目身份认证AD集成(二):快速搞定window server 2003部署AD域服务并支持ssl
本文详细介绍了如何搭建本地AD域控测试环境,包括安装AD域服务、测试LDAP接口及配置LDAPS的过程。通过运行自签名证书生成脚本和手动部署证书,实现安全的SSL连接,适用于ToB项目的身份认证集成。文中还提供了相关系列文章链接,便于读者深入了解AD和LDAP的基础知识。
|
6月前
|
关系型数据库 MySQL 数据库
云计算|OpenStack|社区版OpenStack安装部署文档(三 --- 身份认证服务keystone安装部署---Rocky版)
云计算|OpenStack|社区版OpenStack安装部署文档(三 --- 身份认证服务keystone安装部署---Rocky版)
172 0

相关实验场景

更多