A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始



自定义Realm
上边的程序中使用的是Shiro自带的iniRealm。iniRealm从配置文件中读取用户的信息,大部分情况下需要从系统的数据库中读取用户信息,所以需要自定义Realm。

实现自定义Realm
[java] view plain copy print?
  • public class CustomRealm extends AuthorizingRealm {
  •     // 设置Realm的名称
  •     @Override
  •     public String getName() {
  •         return super.getName();
  •     }
  •     // 支持UsernamePasswordToken
  •     @Override
  •     public boolean supports(AuthenticationToken token) {
  •         return token instanceof UsernamePasswordToken;
  •     }
  •     // 用于认证
  •     @Override
  •     protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
  •         // token是用户输入的
  •         // 第一步从token中取出身份信息
  •         String usercode = (String) token.getPrincipal();
  •         // 第二步:根据用户输入的usercode从数据库查询
  •         // ......
  •         // 如果查询不到返回null
  •         // 数据库中用户账号是zhangsan
  •         if (!usercode.equals("zhangsan")) {
  •             return null;
  •         }
  •         // 模拟从数据库中查询到密码
  •         String password = "123456";
  •         // 如果查询到返回认证信息AuthenticationInfo
  •         SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(usercode, password,
  •                 this.getName());
  •         return simpleAuthenticationInfo;
  •     }
  •     // 用于授权
  •     @Override
  •     protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
  •         return null;
  •     }
  • }
[java] view plain copy print?
  • public class CustomRealm extends AuthorizingRealm {
  •     // 设置Realm的名称
  •     @Override
  •     public String getName() {
  •         return super.getName();
  •     }
  •     // 支持UsernamePasswordToken
  •     @Override
  •     public boolean supports(AuthenticationToken token) {
  •         return token instanceof UsernamePasswordToken;
  •     }
  •     // 用于认证
  •     @Override
  •     protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
  •         // token是用户输入的
  •         // 第一步从token中取出身份信息
  •         String usercode = (String) token.getPrincipal();
  •         // 第二步:根据用户输入的usercode从数据库查询
  •         // ......
  •         // 如果查询不到返回null
  •         // 数据库中用户账号是zhangsan
  •         if (!usercode.equals("zhangsan")) {
  •             return null;
  •         }
  •         // 模拟从数据库中查询到密码
  •         String password = "123456";
  •         // 如果查询到返回认证信息AuthenticationInfo
  •         SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(usercode, password,
  •                 this.getName());
  •         return simpleAuthenticationInfo;
  •     }
  •     // 用于授权
  •     @Override
  •     protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
  •         return null;
  •     }
  • }  
    点击下方标题查看相关学习资料

1 个回复

倒序浏览
谢谢老师分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马