配置好并获取到SecurityManager,代表Shiro正常运行起来了,可以使用Shiro的其它功能。

1、认证流程(API的使用流程)

认证的数据:

  Principals:标识

  ·识别Subject的数据

  ·如:用户名、身份证号等

  ·Primary Principal:Subject唯一主编号

  Credentials:凭证

  ·Subject私密数据

  ·如:密码、指纹、视网膜等

认证的步骤:

  收集数据→提交验证→结果处理

  收集数据方式:

    1、自行实现Shiro的AuthenticationToken接口

    2、使用Shiro提供的一些默认AuthenticationToken接口实现,如UsernamePasswordToken实现

  提交验证:

    Subject代表当前用户,调用Subject的登录方法Subject.login()

  结果处理

    成功:使用Subject的isAuthenticated()方法查看

    失败:抛出异常,可以捕获异常进行处理。

  认证的代码示例:

//收集数据
UsernamePasswordToken token =
new UsernamePasswordToken(username,password);
token.setRememberMe(true);//默认实现提供的一些辅助功能 //提交验证
Subject currentUser = SecurityUtils.getSubject();
currentUser.login(token); //验证是否成功
Subject loginUser = SecutiryUtils.getSubject();
loginUser.isAuthenticated() == true; //登录失败时处理异常
try{
currentUser.login(token);
} catch ( ExType1 ex1){
} catch ( ExType2 ex2){
} catch ( ExType3 ex3){
}....

Remember Me

Remembered

  ·认证信息非空

  ·认证信息来自上一个Session的认证结果

  ·subject.isRememebered() = true 判断上次是否使用RememberMe

Authenticated

  ·认证信息来自当前Session的认证结果

  ·subject.isAuthenticated() = true 判断本次认证是否通过

使用场景:

  商城购物车

  1、上次登录了,这次开启浏览器未登录,想把一个货品加入到购物车(如果此时要求先登录,用户体验不好,现在的网站都是可以先加入购物车,然后付款时再登录付款的)

  这时候,使用isRememebered(),获取上次的认证信息,把购物车数据直接存到上次认证的用户中。

  2、需要下单付款了

  此时再要求登录,然后使用isAuthenticated(),确定本次登录的用户是否正确。

Loggin out

//使Session无效,清空所有认证信息
currentUser.logout();

2、认证架构(框架的内部运作)

1、调用Subject.login(token)方法

2、找Security Manager(门面模式)

3、调用Authenticator组件

4、组件中有很多策略,这些策略会调用Realm获取数据,最终用来判断是否通过验证

5、通过Realm访问数据库等获取数据,用于判断是否通过认证

Authenticator

单个Realm

  ModularRealmAuthenticator:仅有一个Realm,仅通过这个Realm就可以知道是否通过认证

多个Realm

  AuthenticationStrategy:当有多个Realm时,通过某种策略去判断怎样才算认证通过

自定义Authenticator

  当上面都无法满足的时候,我们可以自定义实现一个Authenticator

  然后如下面代码一样,把这个Authenticator赋值给Security Manager即可

[main]
...
authenticator = com.foo.bar.CustomAuthenticator securityManager.authenticator = $authenticator

AuthenticationStrategy

AtLeastOneSuccessfulStrategy[默认值]

  只要有一个Realm验证成功即可,返回所有Realm身份验证成功的认证信息。

FirstSuccessfulStrategy

  只要有一个Reaml验证成功即可,只返回第一个Reaml身份验证成功的认证信息,其它忽略。

AllSuccessfulStrategy

  所有Realm验证成功才算成功,切返回所有Realm身份验证成功的认证信息,如果有一个失败就失败。

[main]
...
authcStrategy = org.apache.shiro.authc.pam.FirstSuccessfulStrategy securityManager.authenticator.authenticationStrategy = $authcStrategy

Realm认证顺序

多个Realm认证顺序

  迭代认证

隐式顺序

  按照配置书写代码的顺序来认证

blahRealm = com.company.blah.Realm
fooRealm = com.company.foo.Realm
barRealm = com.company.another.Realm

显式顺序

  使用securityManager.realms

blahRealm = com.company.blah.Realm
fooRealm = com.company.foo.Realm
barRealm = com.company.another.Realm
securityManager.realms = $fooRealm,$barRealm,$blahRealm

【Shiro】三、Apache Shiro认证的更多相关文章

  1. 【Shiro】Apache Shiro架构之权限认证(Authorization)

    Shiro系列文章: [Shiro]Apache Shiro架构之身份认证(Authentication) [Shiro]Apache Shiro架构之集成web [Shiro]Apache Shir ...

  2. 【Shiro】Apache Shiro架构之身份认证(Authentication)

    Shiro系列文章: [Shiro]Apache Shiro架构之权限认证(Authorization) [Shiro]Apache Shiro架构之集成web [Shiro]Apache Shiro ...

  3. 【Shiro】Apache Shiro架构之自定义realm

    [Shiro]Apache Shiro架构之身份认证(Authentication) [Shiro]Apache Shiro架构之权限认证(Authorization) [Shiro]Apache S ...

  4. 【Shiro】Apache Shiro架构之集成web

    Shiro系列文章: [Shiro]Apache Shiro架构之身份认证(Authentication) [Shiro]Apache Shiro架构之权限认证(Authorization) [Shi ...

  5. [转载] 【Shiro】Apache Shiro架构之实际运用(整合到Spring中)

    写在前面:前面陆陆续续对Shiro的使用做了一些总结,如题,这篇博文主要是总结一下如何将Shiro运用到实际项目中,也就是将Shiro整到Spring中进行开发.后来想想既然要整,就索性把Spring ...

  6. 让Apache Shiro保护你的应用

    在尝试保护你的应用时,你是否有过挫败感?是否觉得现有的Java安全解决方案难以使用,只会让你更糊涂?本文介绍的Apache Shiro,是一个不同寻常的Java安全框架,为保护应用提供了简单而强大的方 ...

  7. Apache Shiro 手册

    (一)Shiro架构介绍 一.什么是Shiro Apache Shiro是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理等功能: 认证 - 用户身份识别,常被称为用户"登录 ...

  8. Apache Shiro 使用手册---转载

    原文地址:http://www.360doc.com/content/12/0104/13/834950_177177202.shtml (一)Shiro架构介绍 一.什么是Shiro Apache ...

  9. Apache Shiro 使用手册

    http://kdboy.iteye.com/blog/1154644 (一)Shiro架构介绍 一.什么是Shiro  Apache Shiro是一个强大易用的Java安全框架,提供了认证.授权.加 ...

  10. Apache Shiro 快速入门教程,shiro 基础教程 (这篇文章非常好)

    第一部分 什么是Apache Shiro     1.什么是 apache shiro :   Apache Shiro是一个功能强大且易于使用的Java安全框架,提供了认证,授权,加密,和会话管理 ...

随机推荐

  1. 企业资源计划(ERP)

    ERP(企业资源计划)一般指企业资源计划(ERP) 物资资源管理(物流).人力资源管理(人流).财务资源管理(财流).信息资源管理(信息流) 信息技术在企业管理学上的应用可分做如下发展阶段:A. MI ...

  2. C# DataTable转为ArrayList

    private static ArrayList DataTableToArrayList(DataTable data) { ArrayList array = new ArrayList(); f ...

  3. nRF51822 蓝牙低功耗和 2.4GHz 专利 SoC

    DESCRIPTION nRF51822 是功能强大.高灵活性的多协议 SoC,非常适用于 Bluetooth® 低功耗和 2.4GHz 超低功耗无线应用. nRF51822 基于配备 256kB f ...

  4. 用 Flask 来写个轻博客 (31) — 使用 Flask-Admin 实现 FileSystem 管理

    Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 扩展阅读 编写 FileSystem Admin 页面 Flask-A ...

  5. APP运营怎么利用留存率等数据分析用户减少的原因?

    APP运营怎么利用留存率等数据分析用户减少的原因? 数据分析最核心的方法是作比较,因为绝对的数值在大多数场合下是没有意义的,通过在不同维度之间做数据的比较分析,能帮助开发者找到数据变化的原因.举一个典 ...

  6. charles抓包看性能数据

    1.优化某个接口或加载速度(H5加载速度慢) 抓包看Overview ①看Duration,就是接口的加载时间 ②看Latency,就是延时一端传播到另一端所花费的时间:一般和网络有关:可以综合Dur ...

  7. Java +selenium Navigation接口介绍

    Navigation接口主要实现对浏览器的前进.后退.打开网址.刷新当前页面等操作的. void back():就是操作当前页面后退,相当于网页的后退按钮. void forward():就是操作当前 ...

  8. Ascii Chart

    Char Dec Oct Hex | Char Dec Oct Hex | Char Dec Oct Hex | Char Dec Oct Hex -------------------------- ...

  9. Learning OSG programing---osgClip

    OSG Clip例程剖析 首先是创建剪切节点的函数代码: osg::ref_ptr<osg::Node> decorate_with_clip_node(const osg::ref_pt ...

  10. ---搭建springMvc框架,希望对初学者有所参考

    Spring Mvc ==> Struts2   spring 无法替代   myBatis 工作量大 要自己操作sql语句 ==> hibernate   Spring Mvc 取代St ...