Shiro固定身份验证
- Shiro基础身份验证
如果要进行shiro的日志信息读取,那么需要使用一个org.apache.shiro.util.Factory接口,在这个接口里面定义有一
取得SecuruityManager接口对象的方法:public T getInstance();
Factory是接口,本次将通过一个ini文件进行读取,使以应该使用"org.apache.shiro.config.IniSecurityManagerFactory"的子类,这个子类里面只需要关注构造方法:public IniSecurityManagerFactory(String iniResourcePath),资源定位通过classpath取得;
|
// 取得Factory接口对象,主要的目的是通过配置文件加载文件中的信息,这些信息暂时不能够成为认证信息 Factory<org.apache.shiro.mgt.SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini"); |
Factory接口中保管的是SecurityManager接口对象,这个接口对象主要是进行所有认证信息的处理,也就是说,用户读取进来的资源文件在这个里面讲转换为所有的认证数据(用户名、密码);
|
//取得里面所保存的所有认证数据 SecurityManager securityManager = factory.getInstance(); |
具体的认证信息一定要通过Subject接口来实现,而SecurityManager只是一个综合的认证信息集合,要取得具体的验证信息还需要"org.apache.shiro.SecurityUtils"类,在这个类中有如下两个方法:
设置SecurityManager接口对象public static void setSecurityManager(SecurityManager securityManager);
取得一个要进行认证的Subject接口public static Subject getSubject();
|
//利用一个专门的认证操作的处理类,实现认证处理的具体实现 SecurityUtils.setSecurityManager(securityManager); |
|
//取得进行用户名和密码认证的接口对象 Subject subject = SecurityUtils.getSubject() ; |
本次使用的是用户名和密码的组合进行认证处理,所以需要将用户名和密码包装为一个Token,在Subject接口下有如下方法:
登录认证:public void login(AuthenticationToken token) throws AuthenticationException;
登录注销:public void logout()。
既然要进行简单认证,那么就输入用户名和密码即可,使用使用"org.apache.shiro.authc.UsernamePasswordToken"只需要创建这个类的对象,创建的时候传递用户名和密码即可实现认证检测:
首先在资源目录下创建一个shiro.ini的资源文件,随后添加一个用户:用户名为admin,密码为hello。在shiro.ini中添加一下信息:
|
[users] admin=hello mldn=java |
|
public public // TODO Auto-generated method stub Factory<org.apache.shiro.mgt.SecurityManager> factory =new IniSecurityManagerFactory("classpath:shiro.ini"); SecurityManager securityManager=factory.getInstance(); SecurityUtils.setSecurityManager(securityManager); Subject subject=SecurityUtils.getSubject(); UsernamePasswordToken token=new UsernamePasswordToken("admin", "hello"); subject.login(token); System.out.println(subject.getPrincipal());//取得用户名 } } |
在为了保证用户名和密码正确的前提下流可以轻松的实现登录控制,二如果说你的用户名或密码错了,那么就讲抛出异常,后期可以通过异常处理来控制页面的跳转;
密码错误,用户名对会出现一下异常:
|
Exception in thread "main" org.apache.shiro.authc.IncorrectCredentialsException: Submitted credentials for token [org.apache.shiro.authc.UsernamePasswordToken - admin, rememberMe=false] did not match the expected credentials. |
用户名错误,密码正确:
|
Exception in thread "main" org.apache.shiro.authc.UnknownAccountException: Realm [org.apache.shiro.realm.text.IniRealm@28ba21f3] was unable to find account data for the submitted AuthenticationToken [org.apache.shiro.authc.UsernamePasswordToken - adn, rememberMe=false]. |
IncorrectCredentialsException验证异常;
UnknownAccountException表示未知用户异常。
在shiro里面如果账户出现了错误,那么密码将不会验证。
- shiro认证流程
通过之前的演示可以发现,整个的Shiro实现的只是用户的登录检测,但是在整个过程中牵扯到了许多接口和子类

在整个程序里面,必须要进行验证数据的加载,而后,所有的认证信息交由SecurityManager管理,而用户要进行用户名和密码的认证操作必须通过Subject接口来完成,随后使用AuthenticationToken保存所有的认证信息,本次为普通的用户和密码,所以使用了它的一个子类UsernamePasswordToken进行配置。
如果登录成功则不会抛出异常,如果登录失败,则会根据失败的类型抛出不同的异常信息。
Shiro固定身份验证的更多相关文章
- Shiro笔记---身份验证
1.shiro有哪些主要功能 2.搭建shiro环境(*) idea2018.2.maven3.5.4.jdk1.8 项目结构: pom.xml: <dependencies> < ...
- Shiro -- (二) 身份验证基本流程
简介: 在 shiro 中,用户需要提供 principals (身份)和 credentials(证明)给 shiro,从而应用能验证用户身份: principals:身份,即主体的标识属性,可以是 ...
- Apache shiro之身份验证(登陆)流程
从张开涛blog学习后整理:http://jinnianshilongnian.iteye.com/blog/2018398 上图中的类和接口都可以继承和实现来个性化自己的实现. 其中重点看一下Mod ...
- shiro实战系列(五)之Authentication(身份验证)
建议学习shiro读读官方文档,虽然不一定读的懂,但是建议要大致浏览,心中有个大概,这样对于学习还是有一定帮助 官网地址:https://shiro.apache.org/ Authenticatio ...
- 基于权限安全框架Shiro的登录验证功能实现
目前在企业级项目里做权限安全方面喜欢使用Apache开源的Shiro框架或者Spring框架的子框架Spring Security. Apache Shiro是一个强大且易用的Java安全框架,执行身 ...
- cas+shiro实现不时时的去请求cas进行身份验证
cas+shiro不进行时时去cas验证身份信息,需要用shiro在当前系统有一份完整的认证机构. 那么有一个问题,什么时候去cas校验信息,目前的配置方式: cas系统设置默认的浏览器session ...
- Shiro 学习笔记(二)——shiro身份验证
身份验证: 在应用中证明他就是他本人.一般上用身份证.用户/密码 来证明. 在shiro中,用户需要提供principals (身份)和credentials(证明)给shiro,从而应用能验证用户身 ...
- shiro 简单的身份验证 案例
Apache Shiro是Java的一个安全框架,Shiro可以帮助我们完成:认证.授权.加密.会话管理.与Web集成.缓存等. 简单的身份验证 项目目录: 首先,在shiro.ini里配置了用户名和 ...
- 跟开涛老师学shiro -- 身份验证
身份验证,即在应用中谁能证明他就是他本人.一般提供如他们的身份ID一些标识信息来表明他就是他本人,如提供身份证,用户名/密码来证明. 在shiro中,用户需要提供principals (身份)和cre ...
随机推荐
- 开涛spring3(6.1) - AOP 之 6.1 AOP基础
6.1.1 AOP是什么 考虑这样一个问题:需要对系统中的某些业务做日志记录,比如支付系统中的支付业务需要记录支付相关日志,对于支付系统可能相当复杂,比如可能有自己的支付系统,也可能引入第三方支付平 ...
- kafka 0.10.2 部署失败后,重新部署
删除kafka各个节点log目录 删除zookeeper上kafka相关的目录 [root@m1 ~]# zkCli.sh Connecting to localhost: -- ::, [myid: ...
- SQL写操作 设置内容 (数组转字符串)
SQL写操作 设置内容 (数组转字符串) SQL set内容 SQL操作数组转字符串 SQL写操作 set内容 (数组转字符串) [ 封装方法 ] function getSqlSet( $data ...
- [机器学习实践] 针对Breast-Cancer数据集
本篇博客中,我们将对一个UCI数据库中的数据集:Breast-Cancer数据集,应用已有的机器学习方法来实现一个分类器. 本文代码链接 数据集概况 数据集的地址为:link 在该页面中,可以进入Da ...
- Java IO流之转换流
一.转换流 1.在IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换流 2.转换流用于在字节流和字符流之间转换 3.转换流本身是字符流 二.两种转换流 Ou ...
- 抽象工厂(AbstractFactory)模式-创建型模式
1.new 的问题 常见的对象创建方法: //创建一个Road对象 Road road=new Road(); new的问题:实现依赖,不能应对具体实例的变化 怎么理解上面这句话呢? 可以这样理解:我 ...
- HTML----网页基础和基本标签
网页分类: 1.静态网页:所有内容全写死,都写在源代码中,若修改必须修改源代码,后缀为.html或htm 2.动态网页:内容大部分来自于数据库,可以修改,后缀为.aspx(c#).jsp(java). ...
- 排序与检索【UVa10474】Where is the Marble?
Where is the Marble? DescriptionRaju and Meena love to play with Marbles. They have got a lot of ma ...
- [UWP]用Shape做动画
相对于WPF/Silverlight,UWP的动画系统可以说有大幅提高,不过本文无意深入讨论这些动画API,本文将介绍使用Shape做一些进度.等待方面的动画,除此之外也会介绍一些相关技巧. 1. 使 ...
- 干货 | 云智慧透视宝Java代码性能监控实现原理
这篇图文并茂,高端大气上档次,思维缜密的文章,一看就和我平时的风格不同.对了.这不是我写的,是我家高大英俊,写一手好代码,做一手好菜的男神老公的大作,曾发表于技术公号,经本人授权转载~~ 一.Java ...