相关阅读
- Spring Shiro流程简析 登录请求处理
- Spring Shiro基础组件 AuthenticationInfo
- Spring Shiro基础组件 AuthenticationStrategy
- Spring Shiro基础组件 Authenticator
简介
是账户的主体数据和登录时提交的支持凭证数据的合并;
核心方法
/**
* 获取账户主体
*/
Object getPrincipal();
/**
* 获取登录凭证
*/
Object getCredentials();
实现子类
public interface AuthenticationToken extends Serializable
public interface RememberMeAuthenticationToken extends AuthenticationToken
public class UsernamePasswordToken implements HostAuthenticationToken, RememberMeAuthenticationToken
public interface HostAuthenticationToken extends AuthenticationToken
public class UsernamePasswordToken implements HostAuthenticationToken, RememberMeAuthenticationToken
public class BearerToken implements HostAuthenticationToken
RememberMeAuthenticationToken
简介
支持指示用户是否希望跨会话记住他们的身份的AuthenticationToken
;
核心方法
/**
* 提交用户是否希望他们的身份被跨会话记住
*/
boolean isRememberMe();
HostAuthenticationToken
简介
支持保留发起身份验证尝试的主机信息的AuthenticationToken
;
核心方法
/**
* 获取客户端hostname/ip
*/
String getHost();
UsernamePasswordToken
简介
简单的用户名/密码身份验证令牌,支持RememberMe
服务和获取发生身份验证尝试的主机名;
使用char[]
存储密码,因为String
不可变,且内部值不可被覆盖,既可以在内存中被访问;
为避免在登录后访问密码信息,应始终在使用令牌执行登录尝试后调用clear()
方法清除信息;
核心方法
// 用户名
private String username;
// 密码
private char[] password;
// 默认不开启RememberMe服务
private boolean rememberMe = false;
// 主机名
private String host;
/**
* 构造方法
*/
public UsernamePasswordToken(final String username, final String password) {
this(username, password != null ? password.toCharArray() : null, false, null);
}
/**
* 获取账户主体
*/
public Object getPrincipal() {
return getUsername();
}
/**
* 获取登录凭证
*/
public Object getCredentials() {
return getPassword();
}
/**
* 获取host
*/
public String getHost() {
return host;
}
/**
* 提交用户是否希望他们的身份被跨会话记住
*/
public boolean isRememberMe() {
return rememberMe;
}
/**
* 清除数据
*/
public void clear() {
this.username = null;
this.host = null;
this.rememberMe = false;
if (this.password != null) {
for (int i = 0; i < password.length; i++) {
this.password[i] = 0x00;
}
this.password = null;
}
}
BearerToken
简介
包含持有令牌或者API密钥的AuthenticationToken
;
持有令牌或者API密码通常通过Http请求头Authorization
传递;
核心方法
// 持有令牌
private final String token;
// 主机名
private String host;
/**
* 构造方法
*/
public BearerToken(String token, String host) {
this.token = token;
this.host = host;
}
/**
* 获取客户端hostname/ip
*/
@Override
public String getHost() {
return host;
}
/**
* 获取账户主体
*/
@Override
public Object getPrincipal() {
return token;
}
/**
* 获取登录凭证
*/
@Override
public Object getCredentials() {
return token;
}