Shiro认证笔记

Shiro是一个Java安全框架,用于身份认证和授权。文中详细介绍了Shiro的认证过程,包括Subject、Principal和Credential的概念。通过创建Maven项目,引入Shiro-core依赖,并配置shiro.ini文件进行用户权限设置。然后,展示了使用Java代码进行用户登录验证的步骤,以及可能出现的认证异常情况,如用户名错误、密码错误等。
摘要由CSDN通过智能技术生成

Shiro中的认证

什么是认证

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

三个概念

Subject

访问系统的用户,主体可以是用户、程序等,进行认证的都称为主体

Principal

身份信息,是主体(subject)进行身份认证的标识,标识必须具有唯一性,如用户名、手机号、邮箱地址等,一个主体可以有多个身份,但是必须有一个主身份(Primary Principal)

credential

凭证信息,是只有主体自己知道的安全信息,如密码、证书等

认证的实现

创建一个普通的maven项目,引入shiro的pom依赖

<dependency>

<groupId>org.apache.shiro</groupId>

<artifactId>shiro-core</artifactId>

<version>1.5.3</version>

</dependency>

引入shiro配置文件shiro.ini,并加入以下配置

# 约定写法

[users]

# 用户名=密码

christy=123456

tide=654321

shiro的配置文件是一个.ini文件,类似于.txt文件

.ini文件经常用作某些软件的特定的配置文件,可以支持一些复杂的数据格式,shiro可以按照内部约定的某种格式读取配置文件中的数据

之所以提供这个配置文件是用来学习shiro时书写我们系统中相关的权限数据,从而减轻配置数据库并从数据库读取数据的压力,降低学习成本,提高学习效率

测试Java代码

import org.apache.shiro.SecurityUtils;

import org.apache.shiro.authc.AuthenticationToken;

import org.apache.shiro.authc.IncorrectCredentialsException;

import org.apache.shiro.authc.UnknownAccountException;

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;

public class ShiroAuthenticatorTest {

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、创建令牌

AuthenticationToken token = new UsernamePasswordToken("christy","123456");

try {

// 6、用户认证

System.out.println("认证状态:"+subject.isAuthenticated());

subject.login(token);

System.out.println("认证状态:"+subject.isAuthenticated());

} catch (UnknownAccountException e){

e.printStackTrace();

System.out.println("认证失败:用户不存在!");

} catch (IncorrectCredentialsException e){

e.printStackTrace();

System.out.println("认证失败:密码不正确!");

} catch (Exception e){

e.printStackTrace();

}

}

认证的几种状态

UnknownAccountException:用户名错误

IncorrectCredentialsException:密码错误

DisabledAccountException:账号被禁用

LockedAccountException:账号被锁定

ExcessiveAttemptsException:登录失败次数过多

ExpiredCredentialsException:凭证过期

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值