在ShiroRealm类下代码
public class ShiroRealm extends AuthenticatingRealm{ @Override protected AuthenticationInfo doGetAuthenticationInfo( AuthenticationToken token) throws AuthenticationException { //1.把AuthenticationToken转换为UsernamePasswordToken UsernamePasswordToken upToken=(UsernamePasswordToken) token; //2.从UsernamePasswordToken中获取username String username=upToken.getUsername();//表单输入的 //3.调用数据库的方法,从数据库中查询username对应的记录 System.out.println("从数据库获取用户名所对应的用户信息"); //4.若用户不存在,则可以抛出UnknownAccountException异常 if("unknown".equals(username)) {//模拟 throw new UnknownAccountException("用户不存在"); } //5.根据用户信息的情况,决定是否抛出其他异常 if("monster".equals(username)) {//模拟 throw new LockedAccountException("用户被锁定"); } //6.根据用户情况构建AuthenticationInfo对象并返回 ,通常实现类为SimpleAuthenticationInfo //以下信息是从数据库获取的 /* * principal:认证的实体信息,可以是username,也可以是实体类对象 * credentials:数据库中获取的密码 * realmName:当前realm对象的name,调用父类的getName()方法即可 */ Object principal=username; Object credentials="123456"; String realmName=getName(); SimpleAuthenticationInfo info=new SimpleAuthenticationInfo(principal, credentials, realmName); return info; } }写完后登录,分别输入unknown,123456; monster,123456和abc,123456。前两个会出异常,最后一个会登录成功
