美文网首页
(一)helloworld

(一)helloworld

作者: guideEmotion | 来源:发表于2019-06-22 20:25 被阅读0次

    一 介绍

    shiro作为一款安全框架Shiro的设计相当精妙。Shiro的应用不依赖任何容器,它也可以在JavaSE下使用。但是最常用的环境还是JavaEE。下面以用户登录为例


    image.png

    二 配置文件

    #定义用户
    [users]
    #用户名 zhang3  密码是 12345, 角色是 admin
    zhang3 = 12345, admin 
    #用户名 li4  密码是 abcde, 角色是 产品经理
    li4 = abcde,productManager
    #定义角色
    [roles]
    #管理员什么都能做
    admin = *
    #产品经理只能做产品管理
    productManager = addProduct,deleteProduct,editProduct,updateProduct,listProduct
    #订单经理只能做产品管理
    orderManager = addOrder,deleteOrder,editOrder,updateOrder,listOrder
    

    三 测试

    登陆

        private static Subject getSubject() {
            //加载配置文件,并获取工厂
            Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
            //获取安全管理者实例
            SecurityManager sm = factory.getInstance();
            //将安全管理者放入全局对象
            SecurityUtils.setSecurityManager(sm);
            //全局对象通过安全管理者生成Subject对象
            Subject subject = SecurityUtils.getSubject();
    
            return subject;
        }
        
        
        private static boolean login(User user) {
            Subject subject= getSubject();
            //如果已经登录过了,退出
            if(subject.isAuthenticated())
                subject.logout();
            
            //封装用户的数据
            UsernamePasswordToken token = new UsernamePasswordToken(user.getName(), user.getPassword());
            try {
                //将用户的数据token 最终传递到Realm中进行对比
                subject.login(token);
            } catch (AuthenticationException e) {
                //验证错误
                return false;
            }               
            
            return subject.isAuthenticated();
        }
    

    角色判断

        private static boolean hasRole(User user, String role) {
            Subject subject = getSubject();
            return subject.hasRole(role);
        }
    

    权限判断

        private static boolean isPermitted(User user, String permit) {
            Subject subject = getSubject();
            return subject.isPermitted(permit);
        }
    

    参考

    1. http://how2j.cn/k/shiro/shiro-tutorial/1720.html

    相关文章

      网友评论

          本文标题:(一)helloworld

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