继承关系
先看一下三者的继承关系,会有一个比较清楚的认识
AuthenticationToken
AuthenticationToken 用于收集用户提交的身份(如用户名)及凭据(如密码)。Shiro会调用CredentialsMatcher对象的doCredentialsMatch方法对AuthenticationInfo对象和AuthenticationToken进行匹配。匹配成功则表示主体(Subject)认证成功,否则表示认证失败。
RememberMeAuthenticationToken
它继承自AuthenticationToken,可用在跨会话记住用户身份。注意,当为相应的用户创建新会话时,该用户的身份将被记住,但不会被视为已通过身份验证
UsernamePasswordToken
用于实现基于用户名/密码主体(Subject)身份认证。UsernamePasswordToken实现了 RememberMeAuthenticationToken 和 HostAuthenticationToken,可以实现“记住我”及“主机验证”的支持。
总结
一般情况下UsernamePasswordToken已经可以满足我们的大多数需求。当我们遇到需要声明自己的Token类时,可以根据需求来实现AuthenticationToken,HostAuthenticationToken或RememberMeAuthenticationToken。
如果不需要“记住我”,也不需要“主机验证”,则可以实现AuthenticationToken;
如果需要“记住我”,则可以实现RememberMeAuthenticationToken;
如果需要“主机验证”功能,则可以实现HostAuthenticationToken;
如果需要“记住我”,且需要“主机验证”,则可以像UsernamePasswordToken一样,同时实现RememberMeAuthenticationToken和HostAuthenticationToken。
如果需要其他自定义功能,则需要自己实现。