zoukankan      html  css  js  c++  java
  • 自定义Realm

    自定义Realm类

    在项目中新建com.bjsxt.realm.MyRealm

    public class MyRealm extends AuthenticatingRealm {
    
        @Override
        protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
            System.out.println("执行认证");
            //用户名
            String username = token.getPrincipal().toString();
            //密码
            String pwd = new String((char[])token.getCredentials());
            System.out.println(username+"  "+pwd);
            //先从数据库查询select * from user where username=? 查看用户名是否存在
            if(username.equals("admin")){//假设用户名为admin时能从数据库中查询出来
                //根据之前查询出来的用户信息获取密码。假设查询出来的密码是pwd
                String password= "pwd";
                //此处需要注意,第二个参数是从数据库查询出来的密码,而不是传递过来的密码。
                //第三个参数自定义。但是尽量不重复了。常直接使用用户名当做realname名字。
                AuthenticationInfo info = new SimpleAuthenticationInfo(token.getPrincipal(),password,"realmname");
                //shiro会判断从数据库查询出来的密码和客户端传递过来的密码是否一致。
                return info;
            }
            //返回null说明用户名不存在。
            return null;
        }
    }
    

      

    修改配置文件

    在配置文件中添加下面内容

    [main]
    myrealm=com.bjsxt.realm.MyRealm
    securityManager.realms=$myrealm
    

      

    测试结果

    ShiroRun中修改用户名和密码,当用户名和密码为admin、pwd时可以正常登录。

    此时无论shiro.ini是否配置了[users],都按照Realm中配置的逻辑进行比较用户名和密码。

    一、 凭证匹配器

    在实际应用中数据库密码都是加密的。Shiro内置了凭证匹配器,通过简单配置就可以实现明文数据和数据库中加密数据匹配的效果。

    修改自定义Realm

    AuthenticationInfo 的构造方法由三个参数变成四个参数的。新增第三个参数表示加盐。

    一般都是拿用户数据的id作为盐。

    //密码必须是MD5加密后的密码
    String password= "7614fd642608ca0755b78d2b2c352e19";
    //假设id是从数据库中取出的id
    Long id = 123L;
    //第三个参数是加密的盐
    AuthenticationInfo info = new SimpleAuthenticationInfo(token.getPrincipal(), password, ByteSource.Util.bytes(id+"") ,token.getPrincipal().toString());
    

      

    修改配置文件

    在配置文件中配置凭证匹配器配置。

    [main]
    md5CredentialsMatcher=org.apache.shiro.authc.credential.Md5CredentialsMatcher
    md5CredentialsMatcher.hashIterations=2
    
    
    myrealm=com.bjsxt.shiro.MyRealm
    myrealm.credentialsMatcher=$md5CredentialsMatcher
    securityManager.realms=$myrealm
    

      

  • 相关阅读:
    SQL Server 2008 如何查看与创建约束
    Hibernate的主键生成策略
    sql server的id字段设置为自动生成的,那么该怎么写insert语句呢?
    org.hibernate.AnnotationException: Collection has neither generic type or OneToMany.targetEntity() defined: com.bjsxt.model.Student.courses
    INSERT 语句与 FOREIGN KEY 约束"XXX"冲突。该冲突发生于数据库"XXX",表"XXX", column 'XXX。
    在排序数组中查找符合条件的数
    求二叉树中节点的最大距离
    设计包含min 函数的栈
    寻找链表的倒数第K个节点
    翻转句子中单词的顺序
  • 原文地址:https://www.cnblogs.com/vincentmax/p/14339642.html
Copyright © 2011-2022 走看看