博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Shiro固定身份验证
阅读量:5090 次
发布时间:2019-06-13

本文共 2975 字,大约阅读时间需要 9 分钟。

  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进行配置。

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

 

 

转载于:https://www.cnblogs.com/jjyz/p/5988398.html

你可能感兴趣的文章
理解oracle中连接和会话
查看>>
两种最常用的Sticky footer布局方式
查看>>
Scrapy实战篇(三)之爬取豆瓣电影短评
查看>>
HDU 5510 Bazinga KMP
查看>>
[13年迁移]Firefox下margin-top问题
查看>>
Zookeeper常用命令 (转)
查看>>
Java程序IP v6与IP v4的设置
查看>>
RUP(Rational Unified Process),统一软件开发过程
查看>>
数据库链路创建方法
查看>>
Enterprise Library - Data Access Application Block 6.0.1304
查看>>
重构代码 —— 函数即变量(Replace temp with Query)
查看>>
Bootstrap栅格学习
查看>>
程序员的数学
查看>>
聚合与组合
查看>>
jQuery如何获得select选中的值?input单选radio选中的值
查看>>
设计模式 之 享元模式
查看>>
如何理解汉诺塔
查看>>
洛谷 P2089 烤鸡【DFS递归/10重枚举】
查看>>
15 FFT及其框图实现
查看>>
Linux基本操作
查看>>