Shiro身份认证

本文深入解析了Shiro框架中的身份认证流程,包括主体、凭证、Realm和异常处理等内容,阐述了如何通过Shiro进行安全的身份验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

身份认证

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

principals——类似于银行卡号(一对多),即主体的标识属性

credentials——只有用户自己才知道的银行卡密码,证明 / 凭证,即只有主体知道的安全值,如密码 / 数字证书等

 Subject 及 Realm,分别是主体及验证主体的数据源

基本流程:

1.获取 SecurityManager 并绑定到 SecurityUtils,这是一个全局设置,设置一次即可

2.通过 SecurityUtils 得到 Subject,其会自动绑定到当前线程;如果在 web 环境在请求结束时需要解除绑定

3.调用 subject.login 方法进行登录,其会自动委托给 SecurityManager.login 方法进行登录

 

常见异常

 AuthenticationException 或其子类

DisabledAccountException(禁用的帐号)

LockedAccountException(锁定的帐号)

UnknownAccountException(错误的帐号)

ExcessiveAttemptsException(登录失败次数过多)

IncorrectCredentialsException (错误的凭证)

ExpiredCredentialsException(过期的凭证)

 

对于页面的错误消息展示,最好使用如 “用户名 / 密码错误” 而不是 “用户名错误”/“密码错误”,防止一些恶意用户非法扫描帐号库;

 

身份验证流程

1.首先调用 Subject.login(token) 进行登录,其会自动委托给 Security Manager,调用之前必须通过 SecurityUtils.setSecurityManager() 设置;

2.SecurityManager 负责真正的身份验证逻辑;它会委托给 Authenticator 进行身份验证;

3.Authenticator 才是真正的身份验证者,Shiro API 中核心的身份认证入口点,此处可以自定义插入自己的实现;

4.Authenticator 可能会委托给相应的 AuthenticationStrategy 进行多 Realm 身份验证,默认 ModularRealmAuthenticator 会调用 AuthenticationStrategy 进行多 Realm 身份验证;

5.Authenticator 会把相应的 token 传入 Realm,从 Realm 获取身份验证信息,

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值