Shiro6-自定义 Realm 进行验证

在上一篇笔记中我们说过

IniRealm: 读取 ini 配置文件, 将来要连接数据,那么就需要仿照此类来读取数据库的账号和密码.

那么我们现在就要自定义一个 Realm 来从数据库中查询我们的用户信息.
注意: 我们一般自定义 Realm 实现都会实现 AuthorizingRealm 类.

自定义 Realm


    // 设置realm的名称
    @Override
    public void setName(String name) {
        super.setName("customRealm");
    }

    // 用于认证
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(
            AuthenticationToken token) throws AuthenticationException {

        // token是用户输入的
        // 第一步从token中取出身份信息
        String userCode = (String) token.getPrincipal();

        // 第二步:根据用户输入的userCode从数据库查询
        // ....
    

        // 如果查询不到返回null
        //数据库中用户账号是zhangsansan
        /*if(!userCode.equals("zhangsansan")){//
            return null;
        }*/
        
        
        // 模拟从数据库查询到密码
        String password = "111112";

        // 如果查询到返回认证信息AuthenticationInfo

        SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(
                userCode, password, this.getName());

        return simpleAuthenticationInfo;

配置 Realm

我们自定义的 Realm 需要注入到 SecurityManager 中,由于我们是通过 ini 文件配置的,所以我们要创建一个 shiro-realm.ini 来专门配置我们的 Realm.

[main]
#自定义 realm
customRealm= 报名+类名
#将 realm 设置到 SecurityManager 中.
securityManager.realms=$customRealm

securityManager.realms是固定的.
customRealm 是自定义的名字.

测试

Factory factory = new IniSecurityManagerFactory(
                "classpath:shiro-realm.ini");

只需要改这一句代码就可以了.

有人可能会问为什么不需要配置[users]了呢?
答:因为我们现在是模拟从数据库查询,而不是读取 ini 配置文件中的用户名密码了.

Shiro6-自定义 Realm 进行验证_第1张图片

你可能感兴趣的:(Shiro6-自定义 Realm 进行验证)