【基本概念】

1、身份验证

即在应用中谁能证明他就是他本人。

一般提供如他们的身份ID 一些标识信息来表明他就是他本人,如提供身份证,用户名/密码来证明。

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

2、身份 principals 【/'prɪnsəpl】

身份,即主体的标识属性,可以是任何东西,如用户名、邮箱等,唯一即可。

一个主体可以有多个principals,但只有一个Primary principals,一般是用户名/密码/手机号。

3、凭证 credentials 【/krə'dɛnʃlz/】

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

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

认证流程

新建一个Maven工程,如果后续功能很多,我们可以删除主工程的SRC目录

再新建一个一个模块来开发学习。

需要的依赖包的坐标:

    <dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.shiro/shiro-core -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.5.3</version>
</dependency> <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.21</version>
<scope>test</scope>
</dependency> <dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.21</version>
<scope>test</scope>
</dependency>
</dependencies>

日志配置文件:

log4j.properties

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

认证信息配置:

shiro.ini

#配置用户
[users]admin=123456user=123456

存放位置:

编写测试类:

代码中的用户信息即表示我们的目标主体的信息

我们使用信息生成令牌进行登陆,对安全管理器加载好的ini认证信息进行核对

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.realm.text.IniRealm;
import org.apache.shiro.subject.Subject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; /**
* @author DaiZhiZhou
* @file Shiro
* @create 2020-08-01 16:47
*/
public class AuthenticationTest { // 日志输出工具
private static final transient Logger log = LoggerFactory.getLogger(AuthenticationTest.class); @SuppressWarnings("deprecation")
public static void main(String[] args) {
String username = "admin";
String password = "123456";
log.info("My First Apache Shiro Application"); // 新版已经摈弃了工厂模式创建对象,直接使用DefaultSecurityManager创建实例
DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager(); // 认证配置信息单独由IniRealm创建加载
IniRealm iniRealm = new IniRealm("classpath:shiro.ini"); // 在安全管理器中注册认证
defaultSecurityManager.setRealm(iniRealm); // 在安全工具类中设置安全管理器
SecurityUtils.setSecurityManager(defaultSecurityManager); // 得到目标主体
Subject subject = SecurityUtils.getSubject(); // 创建令牌实例
AuthenticationToken userToken = new UsernamePasswordToken(username, password); try {
// 主体携带令牌登陆
subject.login(userToken); } catch (Exception exception) {
exception.printStackTrace();
} Subject subject2 = SecurityUtils.getSubject();
aaaa();
System.out.println(subject == subject2); } public static void quickStart(){
// 1,创建安全管理器的工厂对象 org.apache.shiro.mgt.SecurityManager; 不能使用java.lang.SecurityManager
//Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini"); // 2,使用工厂创建安全管理器
//SecurityManager securityManager = factory.getInstance(); // 3,把当前的安全管理器绑定当到线的线程
//SecurityUtils.setSecurityManager(securityManager); // 4,使用SecurityUtils.getSubject得到主体对象
//Subject subject = SecurityUtils.getSubject(); // 5,封装用户名和密码
//AuthenticationToken token = new UsernamePasswordToken(username, password); // 6,得到认证
//try {
// subject.login(token);
// System.out.println("认证通过");
//} catch (AuthenticationException e) {
// System.out.println("用户名或密码不正确");
//}
/*} catch (IncorrectCredentialsException e) {
System.out.println("密码不正确");
} catch (UnknownAccountException e) {
System.out.println("用户名不存在");
}*/ //Subject subject2 = SecurityUtils.getSubject(); //System.out.println(subject);
//System.out.println(subject2); //aaaa();
} public static void aaaa() {
Subject subject2 = SecurityUtils.getSubject();
System.out.println(subject2);
}
}

【Shiro】03 ini认证实现的更多相关文章

  1. Apache shiro集群实现 (二) shiro 的INI配置

    Apache shiro集群实现 (一) shiro入门介绍 Apache shiro集群实现 (二) shiro 的INI配置 Apache shiro集群实现 (三)shiro身份认证(Shiro ...

  2. Java环境下shiro的测试-认证与授权

    Java环境下shiro的测试 1.导入依赖的核心jar包 <dependency> <groupId>org.apache.shiro</groupId> < ...

  3. shiro入门与认证原理

    一.shiro介绍 1.什么是shiro  shiro是apache的一个开源框架,是一个权限管理的框架,实现 用户认证.用户授权. 2.shiro的优点  (1)shiro将安全认证相关的功能抽取出 ...

  4. JAVAEE——BOS物流项目10:权限概述、常见的权限控制方式、apache shiro框架简介、基于shiro框架进行认证操作

    1 学习计划 1.演示权限demo 2.权限概述 n 认证 n 授权 3.常见的权限控制方式 n url拦截权限控制 n 方法注解权限控制 4.创建权限数据模型 n 权限表 n 角色表 n 用户表 n ...

  5. Spring boot 入门(四):集成 Shiro 实现登陆认证和权限管理

    本文是接着上篇博客写的:Spring boot 入门(三):SpringBoot 集成结合 AdminLTE(Freemarker),利用 generate 自动生成代码,利用 DataTable 和 ...

  6. Spring集成shiro做登陆认证

    一.背景 其实很早的时候,就在项目中有使用到shiro做登陆认证,直到今天才又想起来这茬,自己抽空搭了一个spring+springmvc+mybatis和shiro进行集成的种子项目,当然里面还有很 ...

  7. 1、 Shiro框架:认证,授权(验权 2. Shiro框架实现权限控制方式:

    1. Shiro框架:认证,授权(验权) a) 认证逻辑:applicationCode—>通过工具类获取subject对象,调用login方法参数令牌信息->安全管理器------> ...

  8. 项目一:第十一天 2、运单waybill快速录入 3、权限demo演示-了解 5、权限模块数据模型 6、基于shiro实现用户认证-登录(重点)

    1. easyui DataGrid行编辑功能 2. 运单waybill快速录入 3. 权限demo演示-了解 4. Apache shiro安全框架概述 5. 权限模块数据模型 6. 基于shiro ...

  9. spring-boot整合shiro作权限认证

    spring-shiro属于轻量级权限框架,即使spring-security更新换代,市场上大多数企业还是选择shiro 废话不多说  引入pom文件 <!--shiro集成spring--& ...

  10. springboot集成shiro实现权限认证

    github:https://github.com/peterowang/shiro 基于上一篇:springboot集成shiro实现身份认证 1.加入UserController package ...

随机推荐

  1. xhs全参xs,xt,xscommon逆向分析

    声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 目标网站 aHR0cHM6 ...

  2. 使用Logstash同步Mysql到Easysearch

    从 MySQL 同步数据到 ES 有多种方案,这次我们使用 ELK 技术栈中的 Logstash 来将数据从 MySQL 同步到 Easysearch . 方案前提 MySQL 表记录必须有主键,比如 ...

  3. CentOS7打开终端快捷键

    点击右上角的用户名,选择设置>>键盘>>快捷键,然后点+,名称自己写,命令是"/usr/bin/gnome-terminal",这个是不能改的,再点应用,这 ...

  4. 百度面试:如何用Redis实现限流?

    高并发系统有三大特征:限流.缓存和熔断,所以限流已经成为当下系统开发中必备的功能了.那么,什么是限流?如何实现限流?使用 Redis 能不能实现限流?接下来我们一起来看. 1.什么是限流? 限流是指在 ...

  5. axios 下载文件流

    axios 下载文件流 背景:在处理文件下载时,服务端存在校验,需要在请求头里添加token 这时直接使用 a 标签就不能满足需求.接下来我们直接通过 axios 请求,在请求头里设置 token 请 ...

  6. FFmpeg开发笔记全目录(FFmpeg开发实战详解,含直播系统的搭建过程)

    ​记录下FFmpeg的学习笔记目录,完整的FFmpeg开发实战内容详见<FFmpeg开发实战:从零基础到短视频上线>一书. 下面是补充的FFmpeg开发笔记内容目录,主要是对<FFm ...

  7. Freertos学习:08-信号量

    --- title: rtos-freertos-08-ipc-semaphore date: 2020-06-23 11:01:12 categories: tags: - freertos - i ...

  8. 处理 3d 视频的简单理论基础

    背景 公司产品需要满足一些带有3d功能的应用场景,需要需要懂得如何处理3d信号.之前在调试以前产品的时候,发现处理3d信号的时候,是由2个画面叠加起来的. 导言 3D视频(或3D信号)为什么是两个画面 ...

  9. Linux 应用案例开发手册——基于Zynq-7010/20工业开发板

    目 录 1 开发案例说明 4 2 Linux 常用开发案例 4 2.1 tl_led_flash 案例 4 2.2 tl_key_test 案例 7 2.3 tl_can_echo 案例 11 2.4 ...

  10. 【VMware vSAN】vSAN Data Protection Part 1:安装部署。

    VMware vSAN 8 U3 中新引入了基于 vSAN ESA 的全新 vSAN Data Protection 功能,借助 vSAN Data Protection 功能,您可以使用在 vSAN ...