shiro认证机制,认证原理

java-教程王 Java教程 发布时间:2022-01-04 09:31:21 阅读数:5545 1
下文笔者将讲述shiro的认证机制及认证原理,如下所示:
Shiro认证:
    验证用户身份的过程
  在认证过程中,用户需要提交实体信息(Principals)和凭据信息(Credentials)以检验用户是否合法
 如:“用户名/密码”组合

shiro认证原理

1、首先应用程序构建了一个终端用户认证信息的AuthenticationToken
   然后运行Subject.login方法
2、Sbuject的实例通常是DelegatingSubject类(或子类)的实例对象
   在认证开始时,会委托应用程序设置的securityManager实例调用securityManager.login(token)方法 
3、SecurityManager接受到token(令牌)信息后会委托内置的Authenticator的实例(通常都是ModularRealmAuthenticator类的实例)
   调用authenticator.authenticate(token). 
    ModularRealmAuthenticator在认证过程中会对设置的一个或多个Realm实例进行适配
     它实际上为Shiro提供了一个可拔插的认证机制
4、当在应用程序中配置了多个Realm
    ModularRealmAuthenticator会根据配置的AuthenticationStrategy(认证策略)来进行多Realm的认证过程
    当Realm被调用后,AuthenticationStrategy将对每一个Realm的结果作出响应
注:如果应用程序中仅配置了一个Realm,Realm将被直接调用而无需再配置认证策略
5、判断每一个Realm是否支持提交的token
    如果支持,Realm将调用getAuthenticationInfo(token);
     getAuthenticationInfo方法就是实际认证处理,我们通过覆盖Realm的doGetAuthenticationInfo方法来编写我们自定义的认证处理

Shiro认证过程

收集实体/凭据信息
    //用户名 密码校验
UsernamePasswordToken?token?=?new?UsernamePasswordToken(username,?password);
    //开启"记得我"功能
token.setRememberMe(true);
UsernamePasswordToken支持最常见的用户名/密码的认证机制
     同时,由于它实现了RememberMeAuthenticationToken接口
	   我们可以通过令牌设置“记住我”的功能,已记住的用户仅仅是非匿名用户
	   你可以通过subject.getPrincipals()获取用户信息。但是它并非是完全认证通过的用户
	   当你访问需要认证用户的功能时,你仍然需要重新提交认证信息

2、提交实体/凭据信息
Subject currentUser = SecurityUtils.getSubject();  
     currentUser.login(token);  
收集了实体/凭据信息之后,我们可以通过SecurityUtils工具类,获取当前的用户,然后通过调用login方法提交认证。

3、认证处理
try{
    currentUser.login(token);
}catch(UnknownAccountException?uae?){
     }catch(AuthenticationException?ae?){//error
}
如果login方法执行完毕且没有抛出任何异常信息,那么便认为用户认证通过。之后在应用程序任意地方调用SecurityUtils.getSubject() 都可以获取到当前认证通过的用户实例,使用subject.isAuthenticated()判断用户是否已验证都将返回true.?

至此shiro的验证通过了
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaCourse/202201/2166.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者