1. 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
class TestLoginDemo {

public
static
void main(String[] args) {

// 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里面如果账户出现了错误,那么密码将不会验证。

  1. shiro认证流程

    通过之前的演示可以发现,整个的Shiro实现的只是用户的登录检测,但是在整个过程中牵扯到了许多接口和子类

在整个程序里面,必须要进行验证数据的加载,而后,所有的认证信息交由SecurityManager管理,而用户要进行用户名和密码的认证操作必须通过Subject接口来完成,随后使用AuthenticationToken保存所有的认证信息,本次为普通的用户和密码,所以使用了它的一个子类UsernamePasswordToken进行配置。

如果登录成功则不会抛出异常,如果登录失败,则会根据失败的类型抛出不同的异常信息。

Shiro固定身份验证的更多相关文章

  1. Shiro笔记---身份验证

    1.shiro有哪些主要功能 2.搭建shiro环境(*) idea2018.2.maven3.5.4.jdk1.8   项目结构: pom.xml: <dependencies> < ...

  2. Shiro -- (二) 身份验证基本流程

    简介: 在 shiro 中,用户需要提供 principals (身份)和 credentials(证明)给 shiro,从而应用能验证用户身份: principals:身份,即主体的标识属性,可以是 ...

  3. Apache shiro之身份验证(登陆)流程

    从张开涛blog学习后整理:http://jinnianshilongnian.iteye.com/blog/2018398 上图中的类和接口都可以继承和实现来个性化自己的实现. 其中重点看一下Mod ...

  4. shiro实战系列(五)之Authentication(身份验证)

    建议学习shiro读读官方文档,虽然不一定读的懂,但是建议要大致浏览,心中有个大概,这样对于学习还是有一定帮助 官网地址:https://shiro.apache.org/ Authenticatio ...

  5. 基于权限安全框架Shiro的登录验证功能实现

    目前在企业级项目里做权限安全方面喜欢使用Apache开源的Shiro框架或者Spring框架的子框架Spring Security. Apache Shiro是一个强大且易用的Java安全框架,执行身 ...

  6. cas+shiro实现不时时的去请求cas进行身份验证

    cas+shiro不进行时时去cas验证身份信息,需要用shiro在当前系统有一份完整的认证机构. 那么有一个问题,什么时候去cas校验信息,目前的配置方式: cas系统设置默认的浏览器session ...

  7. Shiro 学习笔记(二)——shiro身份验证

    身份验证: 在应用中证明他就是他本人.一般上用身份证.用户/密码 来证明. 在shiro中,用户需要提供principals (身份)和credentials(证明)给shiro,从而应用能验证用户身 ...

  8. shiro 简单的身份验证 案例

    Apache Shiro是Java的一个安全框架,Shiro可以帮助我们完成:认证.授权.加密.会话管理.与Web集成.缓存等. 简单的身份验证 项目目录: 首先,在shiro.ini里配置了用户名和 ...

  9. 跟开涛老师学shiro -- 身份验证

    身份验证,即在应用中谁能证明他就是他本人.一般提供如他们的身份ID一些标识信息来表明他就是他本人,如提供身份证,用户名/密码来证明. 在shiro中,用户需要提供principals (身份)和cre ...

随机推荐

  1. 在Linux下的找不同-打补丁

    Q:为什么要找不同,为什么要打补丁? A: 在Linux应用中,作为DBA,我们知道MySQL跑在Linux系统之上,数据库最重要的追求就是性能,"稳"是重中之重,所以不能动不动就 ...

  2. 关于Java解压文件的一些坑及经验分享(MALFORMED异常)

    文章也已经同步到我的csdn博客: http://blog.csdn.net/u012881584/article/details/72615481 关于Java解压文件的一些坑及经验分享 就在本周, ...

  3. 2017 UESTC Training for Data Structures

    http://acm.uestc.edu.cn/#/contest/show/155 对大二来说貌似这套题有点简单了,多是一眼题 发现漏了一题,然而是以前看别人讨论过的:). H:线段树+暴力.大概就 ...

  4. php的八大数据类型

    1. 八大数据: bool 布尔类型:0,1:真假 integer 整形 float 浮点型 string 字符串 array 数组 object 对象,类,class resource 文件,图片, ...

  5. tab切换插件开发

    我开发的tab切换插件,基于jquery库,实现tab标签页的切换.插件的名称为jquery.tabSwitch.js. 插件实现代码如下: ; (function ($) { $.fn.tabSwi ...

  6. vue-动手做个选择城市

    查看完整的代码请到   我的github地址  https://github.com/qianyinghuanmie/vue2.0-demos 一.结果展示 二.前期准备: 1.引入汉字转拼音的插件, ...

  7. LiteIDE灰调配色方案

    说明 本文写于2017-04-03,使用LiteIDE X31(基于Qt 4.8.5),操作系统为Windows. 使用 LiteIDE下载后解压即可使用.配色方案的所有配置文件都位于liteide/ ...

  8. Java IO流之随机读写流RandomAccessFile

    随机读写流RandomAccessFile 简介 此类的实例支持对随机访问文件的**读取和写入**. 随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组. 存在指向该隐含数组的光标或索引 ...

  9. elasticsearch系列(五)score

    概述 score在ES中有着很重要的作用,有了它才有了rank,是验证文档相关性的关键数据,score越大代表匹配到的文档相关性越大 官方解释 查询的时候可以用explain来展示score的计算过程 ...

  10. [Leetcode] Binary search, DP--300. Longest Increasing Subsequence

    Given an unsorted array of integers, find the length of longest increasing subsequence. For example, ...