AuthenticatingRealm 介绍及用法
AuthenticatingRealm
是 Apache Shiro 框架中的一个抽象类,用于实现用户身份认证功能。它是 org.apache.shiro.realm.Realm
接口的一个实现,在 Shiro 的安全框架中起着核心作用。
在 Shiro 中,Realm 被视为安全数据源,也就是说获取应用程序的安全数据(如用户、角色、权限等)都是从 Realm 获取的。
AuthenticatingRealm
只关注和处理身份认证,但是在实际使用中,通常会使用其子类 AuthorizingRealm
,后者同时处理了身份认证和授权。
下面是一个简单的使用示例:
public class MyAuthenticatingRealm extends AuthenticatingRealm {
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
UsernamePasswordToken upt = (UsernamePasswordToken) token;
String username = upt.getUsername();
// 根据实际情况进行身份认证,并获取用户数据
// 这里仅为示例,假设从数据库获取到的密码为 "password"
String passwordFromDatabase = "password";
if (passwordFromDatabase == null) {
throw new UnknownAccountException("No account found for user [" + username + "]");
}
return new SimpleAuthenticationInfo(username, passwordFromDatabase, getName());
}
}
在这个示例中,我们创建了一个继承自 AuthenticatingRealm
的 MyAuthenticatingRealm
类,并重写了 doGetAuthenticationInfo()
方法。这个方法接收一个 AuthenticationToken
参数,通常是 UsernamePasswordToken
类型,然后根据 token 中的信息(如 用户名和密码)去数据库或其他地方进行真实的身份认证。如果认证成功,则返回一个包含用户信息的 AuthenticationInfo
对象;如果认证失败,则抛出相应的 AuthenticationException
。
注意,在实际应用中,你需要根据自己的用户数据源来获取用户数据,并执行合适的