• shiro(二)自定义realm,模拟数据库查询验证


    自定义一个realm类,实现realm接口

    package com;
    
    import org.apache.shiro.authc.*;
    import org.apache.shiro.realm.Realm;
    
    public class MyRealm implements Realm {
        /**
         * 获取当前realm的名称
         * @return
         */
        @Override
        public String getName() {
            return "MyRealm";
        }
    
        /**
         * 判断当前认证方式是不是用户名和密码
         * @param authenticationToken
         * @return
         */
        @Override
        public boolean supports(AuthenticationToken authenticationToken) {
            return authenticationToken instanceof UsernamePasswordToken;
        }
    
        /**
         * 返回认证信息,这里可以使用链接数据库查询进行判断
         * 只是模拟登录,有兴趣者可以访问数据库进行判断
         * @param authenticationToken
         * @return
         * @throws AuthenticationException
         */
        @Override
        public AuthenticationInfo getAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
           /*获取用户名*/
            String username = authenticationToken.getPrincipal().toString();
            /*获取密码,由于密码是进行了加密的,所以必须转为char数组再转String
            * 否则无法识别*/
            String password =String.valueOf((char [])authenticationToken.getCredentials());
            if (!"admin".equals(username)){
                    throw new AuthenticationException();
            }
            if (!"666".equals(password)){
                throw new AuthenticationException();
            }
            /*返回认证的结果*/
            return new SimpleAuthenticationInfo(username,password,this.getName());
        }
    }

    将自定义realm类配置到.ini文件中

    [main]
    #这里相当于实例化了一个realm对象,这里写的是类路径
    myRealm=com.MyRealm
    
    #这里相当于set进去一个参数
    securityManager.realms=$myRealm
    
    
    #[users],由于采用的自定义realm,所以此处不会被读取了
    #admin=admin
    
    
    [roles]
    admin=123

    测试代码请点击此处链接http://www.cnblogs.com/qq376324789/p/8640651.html

    *提示

      subject就相当于当前用户,realm就相当于dao,上面的代码应该一步一步的写的很清楚了,直接复制进去就应该可以正常运行的;

    真正理解还是需要自己debug一步一步去看的;后面还会继续后面的步骤。

  • 相关阅读:
    复制文件-用FileOutputStream和FileInputStream读写文件
    向属性文件中添加属性
    合并多个文件的内容
    EVA4400存储RAID信息丢失数据恢复过程
    DELL Eq PS4000数据恢复成功案例
    华为OceanStor S5600T服务器数据恢复
    IBM ds4700崩溃重组raid及修复数据库
    分析IBM AIX存储层结构 / 常用存储命令整理
    riad5阵列崩溃,恢复数据过程
    如何使用Handy Backup 6.2进行数据备份(步骤阅读)
  • 原文地址:https://www.cnblogs.com/qq376324789/p/8642143.html
Copyright © 2020-2023  润新知