4、自定义Realm来实现身份认证

1.jdbcRealm已经实现了从数据库获取用户的验证信息,但是jdbcRealm灵活性太差。如果要实现自己的一些特殊应用将不能支持,这个时候可以通过自定义的Realm来达到目的。
2.Realm是一个接口,在接口中定义了更具token获取认证信息的方法。shiro内容实现了一系列的Realm。这些不同的Realm提供了不同的功能。AuthenticatingRealm实现了获取身份信息的功能,AuthorizingRealm实现了获取权限信息的功能。通常自定义Realm需要继承AuthorizingRealm,这样即提供了身份认证的自定义方法也可以实现授权的自定义方法。
3.实现自定义
开始写代码
shiro.ini配置文件(自定义Realm所以在配置文件中不用配置)

[main]
#自定义Realm
userRealm=com.box.tools.UserRealm
securityManager.realm=$userRealm

创建Java类

package com.box.tools;/**
 * @title: UserRealm
 * @projectName sixBox
 * @description: TODO
 * @author Lenovo
 * @date 2019/12/242:39
 */

import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;

/**
 *@ClassName {CLASSNAME}
 *Description TODO
 *Author {HanLiZe}
 *Date 2019/12/24 2:39
 *Version 1.0
 **/
public class UserRealm extends AuthorizingRealm {
    /**
     * shiro
     * 实现自定义Realm
     * 该Realm类提供了两个方法,一个是doGetAuthorizationInfo、getName
     */


    //授权的信息
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        return null;
    }

    //完成(从数据库中取出数据)身份认证并且返回认证信息
    //如果身份认证失败返回null
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
        //获取用户输入的用户名
        String username = (String)token.getPrincipal();//获取身份信息
        System.out.println("username :" +username);
        //更具用户名到数据库中查询密码信息---模拟
        //假定从数据库获取的密码为123
        String password = "123";
        //从数据库中查询的信息封装到SimpleAuthenticationInfo中
        SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(username,password,getName());
        return info;
    }

    @Override
    public String getName() {
        return "urerRealm";
    }
}

然后开始测试… …

你可能感兴趣的:(4、自定义Realm来实现身份认证)