Shiro 的身份认证

Authentication:身份验证的过程。通过提交用户的身份和凭证给shiro,以判断它们是否和应用程序预期的相匹配

基本概念
Principals(身份): 比如登录时提交的用户名
Credentials(凭证):通常是只被Subject知道的密码。比如登录时提交的密码

基本验证步骤
1.收集Subject提交的Principals(身份) 和Credentials (凭证) ,生成token.
2.提交Principals(身份) 和Credentials (凭证) 进行身份验证
3.如果提交成功,则运行访问,否则重新进行身份验证或者阻止访问。

UsernamePasswordToken 支持用户名/密码身份验证

//1.收集Subject提交的用户名/密码 ,生成token.
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
token.setRememberMe(true);  

//2.提交用户名/密码 进行身份验证
Subject currentUser = SecurityUtils.getSubject();
currentUser.login(token);

//3.处理认证结果
try {
        currentUser.login(token);
} catch (AuthenticationException e) {
    // 用户名不对
    e.printStackTrace();
} catch (IncorrectCredentialsException e) {
    // 密码不对
}catch (LockedAccountException e) {
    // 密码锁死
}

logout (注销)
调用logout之后,该Sbuject的实例被再次认为是匿名的,任何现有的session都将失效,任何身份都将市区关联。除了web应用程序。因为webapp 是依靠cookie记住的。

currentUser.logout();

这里写图片描述

Remebered(记住我)

一个记住我的subject不是匿名的,是有一个已知的身份ID的,就是subject.getPrincipal()是非空的。

但是这个被记住的身份ID是之前的seesion中被认证的。

如果subject.isRemembered()返回ture,则subject是被记住的。

shiro里的remeberme 并不是重新登录。只是记住principals 并不会记住credentials 也不会帮你重新登录。

以前的记住我,是会帮忙重新登录

Authenticated(已认证)

一个已认证的subject是指在当前session中通过principals和credentials被成功认证了的。

subject.isAuthenticated()返回ture代表 用户是通过用户名和密码认证过了的。


Remebered的权限比较低
Remebered 和Authenticated 是互斥的。
如果subject.isRemembered()返回ture,那么 subject.isAuthenticated()返回false

posted on 2017-09-27 10:13  dreamstar  阅读(190)  评论(0编辑  收藏  举报