shiro之 自定义Realm来实现身份认证

1. jdbcRealm已经实现了从数据库中获取用户来验证信息,但是jdbcRealm灵活性太差。如果要实现自己的一些特殊应用时将不能支持。这个时候我们可以通过自定义Realm来实现身份的认证功能。

2. Realm是一个接口,在接口中定义了根据token获得认证信息的方法,shiro内容实现了一系列的realm。这些不同的Realm实现类提供了不同的功能。AutenticationRealm实现了获取身份信息的功能,AuthorizingRealm实现了获取权限信息的功能,通常自定义Realm需要继承AuthorizingRealm,既这样可以提供了身份认证的自定义方法,也可以实现授权的自定义方法。

3. 实现自定义Realm

/**
 * 自定义realm的实现  该realm类提供了两个方法 
 * doGetAuthenticationInfo 获取认证信息
 * doGetAuthorizationInfo 获取权限信息
*/
public class UserRealm extends AuthorizingRealm{
    @Override
    public String getName() {
        return "userRealm";
    }
    
    //完成身份认证(从数据库中取数据)并且返回认证信息
    //如果身份认证失败 返回null
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(
            AuthenticationToken token) throws AuthenticationException {
        //获取用户输入的用户名
        String username = (String)token.getPrincipal();//获取身份信息
        System.out.println("username====="+username);
        //根据用户名到数据库查询密码信息---模拟
        //假定从数据库获取的密码为1111
        String pwd = "1111";
        //将从数据库中查询的信息封装到SimpleAuthenticationInfo中
        SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(username,pwd,getName());
        return info;
    }
    //授权的信息
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection arg0) {
        return null;
    }
}

注意:使用shiro来完成权限管理,shiro并不会去维护数据。Shiro中使用的数据,需要程序员根据处理业务将数据传递给shiro的相应接口。

 

posted on 2017-05-15 14:10  forever_2h  阅读(187)  评论(0编辑  收藏  举报

导航