美文网首页
权限框架 - shiro 自定义realm

权限框架 - shiro 自定义realm

作者: 风间影月 | 来源:发表于2017-10-30 11:18 被阅读153次

    上篇文章中是使用的默认realm来实现的简单登录,这仅仅只是个demo,真正项目中使用肯定是需要连接数据库的
    首先创建自定义realm文件,如下:
    [图片上传中。。。(1)]
    在shiro中注入自定义realm的完全限定类名:

    1 [main]
    2 # your custom realm path
    3 fooRealm=com.lee.shiro.realm.FooRealm
    4 # DI such as spring DI
    5 securityManager.realms=$fooRealm
    

    自定义realm认证:

     1     /**
     2      *  设置realm的名称
     3      */
     4     @Override
     5     public void setName(String name) {
     6         super.setName("fooRealm");
     7     }
     8 
     9     /**
    10      * 认证
    11      */
    12     @Override
    13     protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
    14 
    15         // token是用户输入的相关信息
    16         // 从token中取出身份信息, 即用户的username
    17         String username = (String)token.getPrincipal();
    18 
    19         // 根据用户名username从数据库查询密码password
    20         // 如果查询不到返回null
    21         // String password = userService.queryPwdByUserName(username)
    22         
    23         // 假设数据库查询出来的密码为如下
    24         String password = "1234567";
    25 
    26         // 如果查询到返回认证信息AuthenticationInfo
    27         SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(username, password, this.getName());
    28 
    29         return simpleAuthenticationInfo;
    30     }
    

    执行认证:

       /**
         * 
         * @Description: 自定义realm
         * 
         * @author leechenxiang
         * @date 2016年6月11日 下午9:07:27
         */
        @Test
        public void testFooRealm() {
            // 创建SecurityManager工厂,通过ini配置文件创建 SecurityManager工厂
            Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro/shiro-realm.ini");
            // 创建SecurityManager
            SecurityManager securityManager = factory.getInstance();
            // 设置SecurityManager到运行环境中,保持单例模式
            SecurityUtils.setSecurityManager(securityManager);
            // 从SecurityUtils里边创建一个subject
            Subject subject = SecurityUtils.getSubject();
            // 在认证提交前准备token(令牌)
            // 这里的账号和密码 将来是由用户输入进去
            UsernamePasswordToken token = new UsernamePasswordToken("lee", "123456");
            try {
                // 执行认证提交
                subject.login(token);
            } catch (AuthenticationException e) {
                e.printStackTrace();
            }
            // 是否认证通过
            boolean isAuthenticated = subject.isAuthenticated();
            System.out.println("是否认证通过:" + isAuthenticated);
        }
    

    尚自习 | 程序员的进阶平台 itzixi.com

    微信公众号:BeJavaGod

    Java技术交流群

    相关文章

      网友评论

          本文标题:权限框架 - shiro 自定义realm

          本文链接:https://www.haomeiwen.com/subject/tvdppxtx.html