精华内容
下载资源
问答
  • 管理的常识》8-“什么是控制”读后感及阅读笔记
    千次阅读
    2019-05-20 13:22:27

    我理解和认为的控制就是过程管理,周期性的监督和检查,让目标、计划和决策等符合预期,如果出现偏差,及时做出判断和调整。在平时的工作中,我在控制管理中主要关注的是目标完成、问题反馈、风险管控、时间节点、资源投入、结果审核,秉持以终为始(重点关注最终的任务要求和时间节点,以指导当下工作)、过程反馈(每日跟踪、每月跟踪、阶段性跟踪等)、PDCA(每一项工作都是一个环)的理念。我非常同意陈老师的观点“过程管理更多是养成一种工作习惯”,因为我在平时的工作中特别注重习惯的培养,习惯(主动模式)会比制度(被动模式)本身更加的人性化。这么些年给我最大的经验和教训是工作习惯的养成非常难,需要每天坚持每事坚持,这样时间长了(我们经历了三年,还在持续坚持和提高中)之后整个团队的进步非常大,每个人都能靠自驱力进行工作,这时候控制其实已经融进去日常的工作中,类似于“无声胜有声”的感觉。

    总之,我的经验是:控制是必要的,控制是基于过程的,融于习惯的控制更具人性化且高效。

     

    陈春花老师在《管理的常识》中如此介绍“什么是控制”。  

    控制是保障达成绩效的核心职能

    如果企业没有控制职能,企业的规划无法变成企业的绩效,组织管理过程以及领导职能的发挥,也无法与绩效相关。

    控制之所以有意义,是因为控制本身是一个过程,通过这个过程,管理者能够确保实际的活动是否符合计划的活动。

    控制在五个方面发挥作用:1、预防危机出现;2、生产标准化,需要把产品及提供的服务标准化,从而尽量减少偏差;3、考核员工的绩效;4、修订/更新计划;5、保卫组织资产;

    指控职能从根本上理解,是一个预防风险,纠正偏差,确保目标与计划实现的职能。

    控制是一种针对目标的管理行为。

    控制过程四步骤:1、建立工作目标和考核标准(立标);2、测量实际绩效(监察);3、将实际绩效与目标及标准相比较(核对);第四步,采取必要的行动(修正)。

    控制职能并不是指如何建立一套制度,而是如何形成一种工作习惯。

    控制的三个要件

    控制之所以没有很好发挥作用,是因为大部分管理者把控制理解为一套制度、体系和要求,却没有很好地去理解控制的核心要件是什么。

    控制三个核心要件:标准化、量化、全过程化。

    很多时候,中国企业无法发挥控制的职能,并不是因为其他原因,而是因为有制度无标准。

    标准化如何转化为人们日常的工作行为,需要把标准量化,只有量化的标准才有被实施的可能,也才可以真正被检验和衡量。

    强调控制三个要件,是为了让管理者理解控制职能是一个需要设立标准,进行检验与衡量,并贯穿管理活动的全过程的。

    有效控制的四个习惯

    有效控制包括了一系列内容,绩效管理制度、报酬与奖励制度、员工纪律制度、目标管理制度、预算和管理信息制度、生产和控制制度等,其基础上全面预算管理。

    四个习惯的改变:1、思维习惯的改变(预算的起点是战略,与目标有关系,也即是预则立);2、行为习惯的改变(不产生价值的地方,不与目标与计划相关的地方,不应该给资源,只有这样预算才是有用的);3、评价习惯的改变(用目标达成,计划达成来做评价的习惯,要全面实施计划管理,而不是仅仅只看KPI和财务数字);4、对话习惯的改变(实施全面控制管理,这样就有共同的对话体系,大家讲一样的标准、关注共同的要素、有相同的认知);

    控制的负面反应

    第一种,《管理的常识》8-什么是控制设立了不可能实现的标准。

    第二种,在企业内部存在着不可预测的标准。

    第三种,对情境缺乏控制与影响。

    第四种,自相矛盾的标准。

    员工对于控制的负面反应:1、认为绩效目标/标准是“压力工具”;2、本位主义,不顾大体;3、过分重视短期因素;4、过分强调容易测量的因素;5、隐蔽信息;6、躲避和抵触控制。

    防止负面反应的方法

    可以从以下几个方面入手 :1、设立有效的标准;2、控制的程度要适合任务;3、在设立绩效标准时采用参与的方法;4、避免使用不完善的标准;5、不要过分地依赖控制报告;6、及时地提供绩效的回馈;7、使用例外管理。

    成功的企业不仅是授权高手,更是控权高手。管控也许是大家通常习惯的说法和做法,但是真正需要做到的是授权与控制的双向互动。

     

    更多相关内容
  • 如何实现有效的项目进度控制

    千次阅读 2019-02-11 20:00:55
    一、为什么要进行进度控制 可以毫不夸张的讲,每一个项目经理都希望自己负责的项目能够成功!这似乎是每一个项目经理为之追求和奋斗的目标。那怎么才算是一个成功的项目呢?   &amp...

    一、为什么要进行进度控制

    可以毫不夸张的讲,每一个项目经理都希望自己负责的项目能够成功!这似乎是每一个项目经理为之追求和奋斗的目标。那怎么才算是一个成功的项目呢?

           对于成功项目的定义,不同的利益关系人有不同的出发点,也就产生了多种描述的方法,但综合来讲,成功项目就是能够到在规定的工期、成本的条件下,满足或超过项目干系人要求的项目。

            也就是说时间、成本、质量、范围是项目成功的基本要素,对项目的成败起着至关重要的作用。其中时间因素又会对其他方面产生很大的影响。例如:如果时间增加,势必会增加项目的成本;如果时间控制不好,最终出现盲目赶工,势必会影响项目的质量;同时也可能导致项目范围的减少。这些均与项目的成功背道而驰。

           另外,根据当前项目管理专家对失败项目的研究,我们可以发现:工期超出要求的项目占了总体项目的70%以上,工期超出计划,几乎是每个失败项目都存在的问题。因此有效实施项目进度控制,是项目成功的重要保障,是每一个项目经理必须非常重识的工作。

    二、怎么才算是有效的进度控制

    从项目实施的结果上来讲:能够在预定的时间内,达到预期的工作目标,就可以说是项目得到了有效的进度控制。

    从项目实施的过程来讲:有效的进度控制应该具有以下的特征:

    1.具有有效的进度基准计划。

    2.项目经理能够较实时的掌握项目实际进展状况。

    3.能预见性的发现和解决在项目实施中影响项目进展的问题。

    4.能够采取有效方法控制影响项目进展的因素。

    5.项目能在预定的(或可接受的)时间内完成。

    三、影响项目进度的主要因素

    1、项目组的沟通和协调工作不力

    2、忽视项目外部组织的影响

    3、项目组织工作能力不强、工作方法不佳

    4、不能充分发挥项目组成员的作用

    这些问题对于实施有效的进度控制,起到了非常大的负作用,是进行项目进度控制必须解决的问题。

    四、怎样实施有效的进度控制

    1.制定详尽的、可行的项目进度的基准计划

    我们知道,计划是行动的指导,是行动成功的关键所在。对于项目进度控制而言,计划尤显重要,它影响到资源能否被合理使用,项目能否顺利进行,直接关系到项目的成功与否。

    进度计划包括:任务、资源、时间等三部分内容。

    任务来源于工作分解结构和活动定义。要进行有效的进度控制,就要求必须有细致的、可执行的、可检查的、可控制的活动定义(任务)。任务的粒度要求适中。对于不成熟项目和管理水平不高、资源能力不强的项目而言,粒度不能太大,否则难以实现项目的控制;反之任务的粒度可以适当大一些。每项任务需要有明确的责任人、起止时间和工期。

    如果项目管理的水平不是很高的情况下,欲实现有效的进度控制,每项任务的工作量以不大于项目的总体工作量的5%为宜,工期以不大于项目总工期的10%为宜。

    2.建立有效的风险防范计划。

    有效的风险防范计划可以降低不确定性因素对项目工期的影响,保证项目的顺利进展。风险防范的工作可以包含以下方面:

    (1)制定一套项目风险防范的体系,包含:风险识别,风险确认,风险应对等方面的完整内容。这部分工作一般来讲,会由公司级项目管理体系来进行定义和规范。

    (2)针对项目,提出项目风险的协调负责人,及相应的协调措施。

    (3)在项目组内部建立对风险识别的特殊机制,如:每个人可以根据自己的工作内容,定期列举风险指数最高的5个风险,并提出相应的应对方案。

    3.建立良好的项目组内部及项目干系人之间的沟通管理制度。

    沟通是掌握各方信息,进行项目决策和项目协调的基础。实现有效进度控制对于沟通的要求,主要强调以下几点:

    (1)及时与项目客户进行沟通,了解其对于项目的特殊进度要求,以实行对工作任务的特殊处理。

    (2)对于需要项目组之外的资源进行配合的工作,及时通过有效的沟通途径提交给相关人员,以提早准备好配合的工作,免得影响项目的进展。

    (3)充分发挥项目组成员的作用,使之参与到问题解决当中来,如项目偏差的处理,风险的预防等。

    (4)定期举办项目进展的沟通会议,了解各成员的任务执行情况,通报项目的整体进展情况。

    4.进行进展检查,并针对检查结果采取相应的对策。

    在进度控制当中,进度检查是最重要的和最关键的工作,如果不能了解项目实际进展情况,也就很难说执行什么进度控制了。

    进度检查可以定期进行或不定期进行。
      定期执行的进度检查是指在预定的检查周期内执行的检查工作。检查周期是由项目组根据项目的实际情况来预先确定,可以为月、半月、周、半周、日等时间阶段。对于时间跨度比较大的项目,可以周期相对长一些,如:工期超过两年的项目,检查周期可以定为一个月;工期在3个月左右的项目,检查周期可以定义为1周。对于管理水平较高、资源能力较强,实施较成熟的项目,检查周期可以适当的长一些,反之亦然。建议检查周期应该以不高于工期的5~10%为宜,检查工期不超过1个月,根据工作汇报机制的惯例,对于普通项目检查工期可以定为1周。不定期的进度检查,可以在关键任务或里程碑任务的计划完成时间进行,一般不定期的任务检查,是有一定的针对性和目的性。

    进度检查工作可以分为四个步骤执行:

    第一步:收集项目任务的进展信息。

    收集项目的进展信息,是进度控制的基础,它主要是通过各种方式,收集项目的进展信息,作为执行下步工作的依据。主要的工作方法有

    两种:进度汇报和进度查验。通常情况下,项目经理采用由下属进行主动汇报的方式来完成项目进展信息的收集工作,这被称为进度汇报;针对于某些工作,项目经理也可以采用直接检查的方式来获取进展信息或验证汇报信息的准确性,也就是进度查验。为了获得准确的项目进展信息,项目经理必须将两种方法进行有效的结合使用。

    需要收集的项目进展信息包括:任务执行状况和变更信息。任务执行状况包括:任务的实际开始和结束时间,当前任务完成的程度等;变更信息包括:范围变更、资源变更等诸多与项目进度相关联的变更内容。

    另外,合理选择任务执行状况中的任务粒度也是必需掌握的技能。一般情况下,会根据项目进度基准计划中的工作分解来进行。具体的情况,可以根据实际状况来决定。对于项目组织内部有较细的结构划分时,需要采用由下向上逐级检查,逐级汇报的方式。

    这一步骤的工作要求收集的信息必须准确,否则下面的工作将没有如何意义,同时也就根本不可能实现有效的进度控制。

    第二步:进行项目实际进展信息与进度基准计划的比较

    将收集到的项目实际进展信息与项目的进度基准计划进行比较,看是否出现了进度偏差。如果没有偏差,进展检查到此结束,否则执行下一步工作。

    第三步:针对出现的进度偏差,寻求最佳解决方案

    如果出现了进度偏差,针对这些偏差进行分析和研究,发现其中的问题。如果需要问题解决,则针对问题寻找解决方案;如果需要进度计划的调整,则修改进度计划。

    项目实施过程中出现进度偏差是在所难免的,实施进度控制就要求能对偏差能进行有效的控制,提出相应的解决方案,使之有利于项目的进展。

    第四步:执行进度调整后的进度计划和确定的解决方案

    根据偏差的处理决定,执行解决方案,调整项目进度计划。如果需要的话,通知项目干系人。

    当进度偏差比较大时,需要考虑缩小检查周期,以便更好监视纠正措施的效果,以保障项目的按期完成。

    5.预见性的发现和解决项目实施中的问题

    在项目的实施过程中,项目的进度延期,实际上有很多的苗头可以预见性的去发现,发现后就可以及时去采取对策进行问题的解决,这种将问题消灭在萌芽状态的做法,可以有效的保障项目的顺利进行。下面列举说明可以预见性发现的问题及解决方法:

    问题预见性发现问题的方法(解决的方法):

    五、项目进度控制不是孤立了

    项目进度控制按照PMI的项目管理知识体系应该属于时间管理的范畴,但实际上它所包含的内容不仅仅局限于时间管理,除了上面介绍的内容外,还涉及其他的知识领域:范围管理、人力资源管理、风险管理、变更管理等一系列的内容。在这里,我就不想做太多的解释,大家可以参阅相关的资料。
      原文链接

    展开全文
  • springboot整合shiro实现权限控制

    万次阅读 多人点赞 2019-05-24 12:27:40
    Apache Shiro是一个强大且易用的...上个月写了一个在线教育的项目用到了shiro权限控制,这几天又复盘了一下,对其进行了深入探究,来总结一下。 下面所总结的有关shiro的代码已经传到我的github上,可以访问下面的...

    博主简介:原互联网大厂tencent员工,网安巨头Venustech员工,阿里云开发社区专家博主,微信公众号java基础笔记优质创作者,csdn优质创作博主,创业者,知识共享者,欢迎关注,点赞,收藏。

    Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码学和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。上个月写了一个在线教育的项目用到了shiro权限控制,这几天又复盘了一下,对其进行了深入探究,来总结一下。

    下面所总结的有关shiro的代码已经传到我的github上,可以访问下面的链接:

    GitHub - xujiankang6/shirotest

    一、实现功能

    1、完成了记住我功能

    2、完成了密码加密功能

    3、完成了根据shiro权限访问不同内容

    4、完成了使用shiro的session进行保存

    二、实现代码

    1、引入shiro相关的依赖

    我是前端使用了thymeleaf,所以需要引入下面shiro相关的依赖

    <dependency>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-spring</artifactId>
                <version>1.3.2</version>
    </dependency>
    <dependency>
                <groupId>com.github.theborakompanioni</groupId>
                <artifactId>thymeleaf-extras-shiro</artifactId>
                <version>2.0.0</version>
    </dependency>

    2、自定义密码验证器

    (1)这个类实现了shiro的SimpleCredentialsMatcher接口来重新密码验证方法

    (2)同时写了加密的方法encrypt(String data),拿到前台传过来的密码后,使用该方法加密后与数据库的拿到的密码进行比对,返回ture或者fasle。

    (3)当然,前台注册时,保存数据库的密码也需要用同样的形式把密码加密后再保存。

    //验证密码 查找到了1该用户 自定义密码验证器
    public class MyMatcher extends SimpleCredentialsMatcher {
    
        @Override
        public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) {
            UsernamePasswordToken usernamePasswordToken = (UsernamePasswordToken) token;
            String pwd = encrypt(String.valueOf(usernamePasswordToken.getPassword()));
            String mysqlpwd = (String) info.getCredentials();
            return this.equals(pwd, mysqlpwd);
        }
    
    
        //将传进来的密码进行加密的方法
        private String encrypt(String data){
            String sha384Hex=new Sha384Hash(data).toBase64();
            return sha384Hex;
        }
    
    }

    3、自定义realm

    当密码验证通过后,就到了我们的自定义realm,在我们自定义realm中实现了AuthorizingRealm接口,将其方法进行重写,将各种权限对用户进行授权,同时对用户身份进行验证,代码如下,每一行代码具体含义十分详细了。

    //登录及权限验证
    public class MyRealm extends AuthorizingRealm {
    
        @Autowired
        UserService us;
    
      //角色权限和对应权限添加
        //Authorization授权,将数据库中的角色和权限授权给输入的用户名
        @Override
        protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
            //获取登录的用户名
            String phone = (String) principalCollection.getPrimaryPrincipal();
            //到数据库里查询要授权的内容
            User user = us.querybyname(phone);
            //记录用户的所有角色和权限
            SimpleAuthorizationInfo simpleAuthorizationInfo=new SimpleAuthorizationInfo();//权限信息
            for(Role r:user.getRoles()){
                //将所有的角色信息添加进来。
                simpleAuthorizationInfo.addRole(r.getRname());
                for(Permission p:r.getPermissions()){
                    //将此次遍历到的角色的所有权限拿到,添加·进来
                    simpleAuthorizationInfo.addStringPermission(p.getPname());
                }
            }
            return simpleAuthorizationInfo;
        }
    
        //用户身份验证
        @Override
        protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
            //从token获取用户名,从主体传过来的认证信息中获取
            //加这一步的目的是在post请求时会先进入认证然后再到请求。
            if(authenticationToken.getPrincipal()==null){
                return null;
            }
            //获取用户的登录信息,用户名
            String phone=authenticationToken.getPrincipal().toString();
    
            //根据service调用用户名,查找用户的全部信息
            //通过用户名到数据库获取凭证
            User user=us.querybyname(phone);
            if(user==null){
                //这里返回会报出对应异常
                return  null;
            }else{
                //这里验证authenticationToken和simpleAuthenticationInfo的信息
                SimpleAuthenticationInfo simpleAuthenticationInfo=new SimpleAuthenticationInfo(phone,user.getUpwd().toString(),getName());
                return simpleAuthenticationInfo;
            }
    
        }
    

    4、自定义记住我过滤器

    该过滤器是为了实现记住我后,用户再次登陆不需要进行权限验证,就能到达首页,后面会介绍当不使用该过滤器的后果。

    (1)该过滤器实现当用户通过isRemembered()登陆,没有通过isAuthenticated()登陆时拿到user的session信息,保证后面到达首页时候能拥有各种跟通过isAuthenticated()登陆时的session信息。

    (2)过滤器完成了登陆条件的过滤,要么通过权限认证登陆成功,要么通过记住我登陆成功。

    (3)在shiroconfig类中会进行shiro访问权限配置。

    public class MyRememberFilter extends FormAuthenticationFilter {
    
        protected boolean isAccessAllowed(HttpServletRequest request, HttpServletResponse response, Object mappedValue){
            Subject subject=getSubject(request,response);
            if(!subject.isAuthenticated() && subject.isRemembered()){
                if(subject.getSession().getAttribute("user")==null &&subject.getPrincipal()!=null){
                    subject.getSession().setAttribute("user",subject.getPrincipal());
                }
    
            }
    
            return subject.isAuthenticated() || subject.isRemembered();
        }
    }

    5、实现shiroConfig配置类

    (1)配置密码验证器

     @Bean("credentialsMatcher")
        public CredentialsMatcher credentialsMatcher() {
            return new MyMatcher();
        }

    (2)配置权限验证器

    @Bean("myRealm")
        public MyRealm myRealm(@Qualifier("credentialsMatcher") CredentialsMatcher credentialsMatcher) {
            MyRealm myRealm = new MyRealm();
            //给权限验证器配置上自定义的密码验证器
            myRealm.setCredentialsMatcher(credentialsMatcher);
            return myRealm;
        }

    (3)配置缓存验证器

        @Bean
        public CacheManager cacheManager(){
            return new MemoryConstrainedCacheManager();
        }

    (4)配置记住我Cookie对象参数,rememberMeCookie()方法是设置Cookie的生成模版,比如cookie的name,cookie的有效时间等等。

        public SimpleCookie rememberMeCookie() {
    //        这个参数是cookie的名称,对应前端的checkbox的name=rememberMe
            SimpleCookie simpleCookie = new SimpleCookie("rememberMe");
    //        cookie生效时间为10秒
            simpleCookie.setMaxAge(10);
            return simpleCookie;
        }

    (5)配置Cookie管理对象,rememberMeManager()方法是生成rememberMe管理器,而且要将这个rememberMe管理器设置到securityManager中

        @Bean
        public CookieRememberMeManager rememberMeManager() {
            CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager();
            cookieRememberMeManager.setCookie(rememberMeCookie());
            return  cookieRememberMeManager;
        }

    (6)注入自定义记住我过滤器

        @Bean
        public MyRememberFilter MyRememberFilter(){
            return new MyRememberFilter();
        }

    (7)配置securityManager安全管理器,主要起到一个桥梁作用。

        @Bean("securityManager")
        public SecurityManager securityManager(@Qualifier("myRealm") MyRealm myRealm) {
            DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager();
            //注入自定义myRealm
            defaultWebSecurityManager.setRealm(myRealm);
            //注入自定义cacheManager
            defaultWebSecurityManager.setCacheManager(cacheManager());
            //注入记住我管理器
            defaultWebSecurityManager.setRememberMeManager(rememberMeManager());
            //注入自定义sessionManager
            defaultWebSecurityManager.setSessionManager(sessionManager());
            return defaultWebSecurityManager;
        }
    

    (8)进行全局配置,Filter工厂。设置对应的过滤条件和跳转条件,有自定义的过滤器,有shiro认证成功后,失败后,退出后等跳转的页面,有静态页面等内容的权限范围。

        @Bean("shiroFilterFactoryBean")
        public ShiroFilterFactoryBean shiroFilterFactoryBean(@Qualifier("securityManager") SecurityManager securityManager) {
            //shiro对象
            ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
            bean.setSecurityManager(securityManager);
            bean.setLoginUrl("/login");
            bean.setSuccessUrl("/index");
    
            Map<String, Filter> filterMap=new LinkedHashMap<String,Filter>();
           filterMap.put("MyRememberFilter",MyRememberFilter());
    
            //MAP
            LinkedHashMap<String, String> linkedHashMap = new LinkedHashMap<String, String>();
            /*
            认证顺序是从上往下执行。
             */
            linkedHashMap.put("/logout", "logout");//在这儿配置登出地址,不需要专门去写控制器。
            linkedHashMap.put("/static/**", "anon");
            //开启注册页面不需要权限
            linkedHashMap.put("/register", "anon");
            linkedHashMap.put("/saveregister", "anon");
            //验证phone唯一
            linkedHashMap.put("/solephone", "anon");
            //获取验证码
            linkedHashMap.put("/getcode", "anon");
            //验证码判断
            linkedHashMap.put("/comparecode", "anon");
            linkedHashMap.put("/websocket", "anon");//必须开启。
            linkedHashMap.put("/css/**", "anon");//不需要验证
            linkedHashMap.put("/js/**", "anon");//不需要验证
            //配置错误页面
            linkedHashMap.put("error", "anon");//不需要验证
            linkedHashMap.put("/img/**", "anon");//不需要验证
            linkedHashMap.put("/layui/**", "anon");//不需要验证
            linkedHashMap.put("/video/**", "anon");//不需要验证
            linkedHashMap.put("/bower_components/**", "anon");//不需要验证
            linkedHashMap.put("/plugins/**", "anon");//不需要验证
            linkedHashMap.put("/dist/**", "anon");//不需要验证
            linkedHashMap.put("/**", "user");//需要进行权限验证
            bean.setFilterChainDefinitionMap(linkedHashMap);
            return bean;
        }
    

    (9)配置shiro的生命周期

        @Bean
        public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
            return new LifecycleBeanPostProcessor();
        }

    (10)配置shiro注解是否生效

    启动Shiro的注解(如@RequiresRoles,@RequiresPermissions),需借助SpringAOP扫描使用Shiro注解的类,并在必要时进行安全逻辑验证

    配置以下两个bean(DefaultAdvisorAutoProxyCreator和AuthorizationAttributeSourceAdvisor)即可实现此功能

    @Bean
        public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {
            DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
            defaultAdvisorAutoProxyCreator.setProxyTargetClass(true);
            return defaultAdvisorAutoProxyCreator;
        }
    
        @Bean
        public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(@Qualifier("securityManager") SecurityManager securityManager) {
            AuthorizationAttributeSourceAdvisor sourceAdvisor = new AuthorizationAttributeSourceAdvisor();
            sourceAdvisor.setSecurityManager(securityManager);
            return sourceAdvisor;
        }

    (11)配置前台的shiro标签,使其能够使用

    前台是使用shiro结合thymeleaf实现细粒度权限控制的。

        @Bean
        public ShiroDialect shiroDialect() {
            return new ShiroDialect();
        }

    6、用户登陆controller实现

    (1)当用户第一次到达登陆页面时,通过get方式。

        @RequestMapping(value = "/login", method = RequestMethod.GET)
        public String login(@Param("phone") String phone, @Param("upwd") String upwd) {
    
            return "login";
    
        }

    (2)用户提交登陆信息时,通过post方法。

        @RequestMapping(value = "/login", method = RequestMethod.POST)
        public ModelAndView login2(@Param("phone") String phone, @Param("upwd") String upwd) {
            ModelAndView m = new ModelAndView();
            //添加用户认证信息
            Subject subject = SecurityUtils.getSubject();
            UsernamePasswordToken uToken = new UsernamePasswordToken(phone, upwd);
            //实现记住我
            uToken.setRememberMe(true);
            try {
                //进行验证,报错返回首页,不报错到达成功页面。
                subject.login(uToken);
    
            } catch (UnknownAccountException e) {
                m.addObject("result", "用户不存在");
                m.setViewName("login");
                return m;
            } catch (IncorrectCredentialsException e) {
                m.addObject("result", "密码错误");
                m.setViewName("login");
                return m;
            }
            //将权限信息保存到session中
            User user = sd.querybyname(phone);
    
            List<Permission> permissions = new ArrayList<Permission>();
            for (Role role : user.getRoles()) {
                for (Permission permission : role.getPermissions()) {
                    permissions.add(permission);
                }
            }
            Map<String, ArrayList<Permission>> map = new HashMap<String, ArrayList<Permission>>();
            for (Permission p : permissions) {
                String name = p.getPermission_group_name();
                if (!map.containsKey(name)) {
                    ArrayList<Permission> mList = new ArrayList<Permission>();
                    mList.add(p);
                    map.put(name, mList);
                } else {
                    ArrayList<Permission> pList = map.get(name);
                    pList.add(p);
                    map.put(name, pList);
                }
            }
    //       保存到shiro的session中一些信息
            Session session = subject.getSession();
    //        保存userinfo的基本信息
            int uid = user.getUid();
            UserInfo userInfo = sd.queryuserinfo(uid);
            //保存user信息
            session.setAttribute("user", user);
    //shiro权限验证成功后跳转的界面
            m.setViewName("index");
            return m;
        }

    7、用户前端登录页面

    (1)部分代码

    <div class="login-box-body">
            <p class="login-box-msg">登录更精彩!!!</p>
            <form action="login" method="post">
                <div class="form-group has-feedback">
                    <input type="phone" class="form-control" placeholder="请输入手机号" name="phone">
                    <span class="glyphicon glyphicon-envelope form-control-feedback"></span>
                </div>
                <div class="form-group has-feedback">
                    <input type="password" class="form-control" placeholder="请输入密码" name="upwd">
                    <span class="glyphicon glyphicon-lock form-control-feedback"></span>
                </div>
                <div class="row">
                    <div class="col-xs-8">
                        <div class="checkbox icheck">
                            <label>
                                <input type="checkbox" name="rememberMe"> 记住账户
                            </label>
                        </div>
                    </div>
                    <!-- /.col -->
                    <div class="col-xs-4">
                        <button type="submit" class="btn btn-primary btn-block btn-flat">登录</button>
                        <p th:text="${result}" style="color: red"></p>
                    </div>
                    <!-- /.col -->
                </div>
            </form>
            <!-- /.social-auth-links -->
            <a href="#">忘记密码?</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            <a href="/register" class="text-center">注册</a>
        </div>
        <!-- /.login-box-body -->
    </div>

    (2)页面展示

    8、前台使用shiro结合thymeleaf实现细粒度权限具体实现

    <div class="description-block">
        <shiro:hasAnyRoles name="教员">
            <h5 class="description-header" th:text="${courses.size()}">35</h5>
        </shiro:hasAnyRoles>
        <shiro:hasAnyRoles name="管理员">
            <h5 class="description-header" >0</h5>
        </shiro:hasAnyRoles>
        <shiro:hasAnyRoles name="普通用户">
            <h5 class="description-header" >0</h5>
        </shiro:hasAnyRoles>
        <span class="description-text">课程数</span>
    </div>

    三、注意事项

    1、记住我功能

    (1)我们自定义记住我过滤器是为了在通过isRemember()登录时,能够得到和通过isAuthenticated()登录一样的信息,因为当我们通过isAuthenticated()登录时,我们获取了一下session信息,通过isRemember()登陆我们只拿到了账户密码信息,虽然能够登陆成功,但是由于缺少一些session信息,在到达首页时会报错,完成不了后续的操作。

    (2)在shiroConfig中我们需要配置自定义的过滤器,并在该类的shiro全局配置中把该过滤器注入进来,让其功能实现。

    Map<String, Filter> filterMap=new LinkedHashMap<String,Filter>();
    filterMap.put("MyRememberFilter",MyRememberFilter());

    (3)我们需要把shiroConfig全局配置中的下面的权限改为user权限

    linkedHashMap.put("/**", "authc");

    如果我们使用authc权限,我们通过记住我登陆成功后,关闭浏览器,再打开还是需要输入账户密码,不能直接到达首页,没有实现效果,因为isRemember()的权限是user权限,比authc权限低,所以通过记住我登陆后,shiro会觉得不安全,让再次输入密码,只有改为user权限才能实现,下次打开浏览器,不需要输入密码,直接登陆成功。

    (4)但是使用user权限又会带来新的问题,我们对一些敏感的信息,不想让用户通过user权限看到,这时需要对此种页面使用authc权限,当到达这样的页面时,我们需要账户密码重新登陆一下。

    2、密码加密功能

    (1)我们必须在MyMathcher中对拿到的前台的密码进行加密后再与数据库中的密码进行比对。

    (2)在注册时,我们需要用相同的加密算法对用户注册的密码进行加密保存的数据库中,通过shiro验证时,拿加密后的数据库中的密码与前台用户登录时的密码加密后进行比对。这样才能够实现权限验证。

    (3)我只是使用了一种简单的算法,大家可以用加盐的MD5,自行操作。

    四、总结

    以上是我对shiro的深入理解,希望对小伙伴能有帮助,更多精彩请关注:

    展开全文
  • 网络远程控制原理及技术实现

    万次阅读 2018-10-30 20:30:54
    网络远程控制技术即利用一台电脑远距离控制另一台电脑,这个控制过程,将TCP/IP协议网络数据通信作为基础,在控制计算机与被控计算机内运行,确保网络通讯等各项功能可以顺利实现。现在IP协议主要存在UDP与TCP...

    一、网络远程控制技术原理

    网络远程控制技术即利用一台电脑远距离控制另一台电脑,在这个控制过程中,将TCP/IP协议网络数据通信作为基础,在控制计算机与被控计算机内运行,确保网络通讯等各项功能可以顺利实现。现在IP协议中主要存在UDP与TCP两种通讯传输协议,且UDP协议采用数据拆分后以数据报传输方式,并未对达到数据有专门要求;TCP 协议则是对待传输数据进行分割、打包处理后,以数据流形式进行传输,可以选择在控制与被控制两台计算机间建立虚电路,提高数据传输的准确性、连续性与双向性。两种协议对比可知,UDP协议运行可靠性较低,两台计算机间未建立有效的连接,只有当客户端与服务端选择应用相同程序时,才可以进行数据的传输。而TCP 协议因两者间具有稳定的连接关系,具有更大的灵活性。

    二、网络远程控制技术实现

    (1)远程唤醒控制技术

    想要对指定的远程计算机进行网络唤醒时,需要在本地计算机中,将一个MAGIC PACKET 标准唤醒数据包作为基础进行发送。数据包内含有所有用于唤醒远程计算机的物理地址,因为计算机电源专用线路来为网络控制芯片进行供电,即便待环境计算机为关机状态,也可以实现对计算机网络内数据包进行良好的接收与控制。由控制芯片来对数据包内的所有MAC地址进行检查确认,然后通过专用线路将电源信号开启,向计算机主板发送开机启动命令,达到唤醒目的。

    (2)远程屏幕监控技术

    远程屏幕监控技术的实现,需要将TCP协议作为基础,操作控制端向被控制端发送截屏命令。待被控制端计算机接受命令后,便可自动完成自己屏幕的截屏操作,并将截屏图片发送给控制端计算机,且在接受后显示在控制端计算机上。通过钩子程序,被控制端接收的鼠标点击事件或键盘事件加到消息队列中,以实现对被控制端的点击和按键操作。

    (3)远程关机技术

    远程关机技术的实现,需要通过TCP/IP 网络协议内C/S结构实现,完成计算机服务器端的软件安装,并通过控制方端口向受控方端口发送数据包。如果需要对其他计算机进行控制,则需要另外安装客户端软件。此种网络通信功能的实现,均通过TCP/IP 网络协议实现网络连接。待将客户端计算机关闭后,由客户端计算机发送命令,调用系统关机函数,便可以实现远程计算机的关机操作。

    网络远程控制服务器程序实现过程

    服务器程序需要先设置好LocalPort 属性,作为侦听端口,且值为任何一个其他TCP/IP 应用程序未用过的整数即可。利用Listen 方法进入侦听状态,等待远程端客户机程序连接要求。当客户机程序发出连接请求后,程序将会产生一个ConnectionRequest事件,并得到一个参数requestID。服务器程序通过Accept 方法接受客户机程序requestID 请求,然后通过SendData 方法发送数据,且此种方法需要选择上一步获得的requestID 为参数。待服务器程序成功接收到程序后,产生DtataArrival 事件。而程序接收到的所有数据字节数均被包含在参数BytesTotal 内。如果接收到Close 事件,则选择应用Close 方法将TCP/IP 连接关闭。

    网络远程控制客户机程序实现过程

    客户机程序需要先设置Remotehose 属性,确定运行服务程序主机名,并指定服务器程序侦听端口。选择Connect 方法,向服务器提出连接请求。服务器接受到客户机请求后,程序产生Connect 事件,便可以通过应用SendDaya 方法发送数据。待客户机程序接收到数据后,产生DtataArrival 事件,参数BytesTotal 包含接收到的数据字节数。如果接收到的为Close 事件,则可以用Close 方法关闭。

    三、网络远程控制结构

    计算机网络远程控制主要包括远程控制体系结构与通。信系协其网络结构以“分”与“和”网络实体,并包括主控 网络与受控网络两个体系结构从功能角度分析,远程控制系统主要指主拴网络系统、信息及数据的传输通道以及受控网络系统,三者相互协作从而实现远程控制的目标。

    网络远程控制主控网络

    关于主控网络,首先需提到网络系统控制过程的基本理论,即网络控制论。其主要研究内容为信息、状态以 及网络拓扑结构,通常这种理论是向建主控网络的参考依据。而主控网络的功能方面,主要在于对控制命令及参数的输入,并将被控设备的操作 以及反馈信息显示出来。另外,从网络主控的基本框架角度,又分为集中、分散和递阶三种控制结构,每个控制结构都存在二定的优点及不足。二其中集中控制结构在结构与控制方面比较简单,使管理与建网工作比较容易,而且延迟时间小,减少传输 过程中的误差。但是安装的工作量较大,成本较高,不利于实现资源共享。分散控制结构的优势在于其可靠性较高,即使控制器出现故障,网络系统也不会全局瘫痪。所以在系统规模元法集中控制、通信较为方便或者用户要求使用分散控制结构的场合中,可采用分散控制结构,然而分散控制结构也存在一定的缺陷。如对网络系统状态无法控制与观测,递阶控制结构,将集中与分散控制结构相结合,既能实现局部控制,又可对全局实现协调控制。

    网络远程控制受控网络体系

    受控网络体系主要以网络控制论为基础,通过软件或硬件使控制机制得以执行,提供一定的控制服务。一般受控网络系统可理解为一个数据资源,也可以是以计算机为中心,将现场控制与管理及数据采集结合在一起形成的控制系统。在结构方面,主要包括网络受控中心、采集节点用户界面以及中间控制节点。设计过程中,应遵循一定的原则,即进行安全检测安全防护和应急恢复的规划体现的是整体性的原则,划分受控网络安全级别与层次体现的是等级性原则。受控网络中可变因素的引进体现的是动态化的原则,对权限的限制体现了最小化原则,只有保证设计原则的应用,才能使网络系统的安全性与控制性得到保障。

    网络远程控制通信协议

    (1)TCP协议

    TCP 协议在现阶段应用中,已成为网络协议的主要标准,具布一定的安全性与稳定性。但占用资源过多、效率较低,其主要特征包括三种:第一,面向连接TCP 协议必须保证两台计算机之间连接进程的建立,才能实现数据的交换。第二,通过返回通知与序列号的使用,确保传输的可靠性,由于TCP的数据段通常会以多个数据包的形式进行传输,序列号的使用使接收端能够将多个数据包恢复为原来的数据段,在通过返回通知的使用,确认数据己收到。第三,字节流通信的使用,这说明数据会被没有任何信息的字节序列代替。

    (2)IP协议

    IP 协议又称 因特网协议,用于连接多个包交换网络。从源地址向目的地址传送数据包,而且为使数据包大小满足不同网络的要求,提供重新组装数据大小的功能。在提供服务方面, IP协议包括四个关键技术:第一,服务类型,服务类型可理解为一个参数集,其中的参数是网络可以提供服务的典型代表,这种服务类型主要由网关使用,用于特定的网络或即将要经过的网络。第二,生存时间:一般发送者会对其进行设置并处理,若数据报没有到达目的地,其生存时间已到上限,便可抛弃此数据报。第三,选项。选项主要包括安全、时间戳和特殊路由,对控制函数起到很重要的作用。第四,报头校验码。它的功能在于确保数据能够正确传输,若校验出错,便将整个数据报抛弃。

    现阶段,较为流行的TCP/IP协议代表了TCP与IP两个协议,具体可分为简单网络管理协议、互联网应用协议、支持应用接口以及核心协议。其中简单网络管理协议允许使用如Sum Net Manages或HP Open View等管理工具。对Windows NT计算机进行远程管理。互联网应用协议则包括FTP、Rep、Finger等协议,使非Microsoft系统计算机上的资源可以为Windows系统用户使用。支持应用接口协议包括远程控制、Windows套接字、Networks以及Net BIOS。核心协议具体包括UDP协议、ARP协议以及ICMP协议,为计算机互联和网络互联提供了标准协议。由此可见,TCP/IP协议可理解为一组网络协议的集合。

    四、网络远程控制应用

    网络远程控制企业环境应用

    在工业迅速发展的背景下,企业想要在市场竞争中占据更大的优势,需要积极引进各项新型技术,提高作业的数字化与信息化水平。例如利用计算机、感应器、检测器等设备将工厂整个生产工艺连接成一个互联的无线控制网络,不仅可以降低生产管理难度,同时还可以减少各类问题的产生,提高生产综合效率。就企业应用现状来看,大部分选择应用局域网络方式,实现机械设备与无线局域网间信息的转化,来提高工业设备联网通信能力。与传统有线网络相比,无线局域网无论是建设成本,还是运行灵活等方面均具有更大的优势。同时,中心监控计算机可以选择应用无线局域网,对设备收集的数据进行有效统计、分析和保存,为管理工作的实施提供数据支持。目前应用最为广泛的为PID 控制方式,以系统误差为依据,通过比例、积分、微分计算出最为合适的生产控制量,对生产总量进行有效调整与控制。

    网络远程控制居民生活应用

    日常生活中计算机的应用已经十分广泛,且取得了良好的效果,尤其是在通信交流方面,计算机通讯软件的应用具有明显的优势,例如现在应用的QQMSN微信等,改变了传统通信方式,在实际应用中具有更大的灵活性,资费也更少,更容易被人们所接受。腾讯QQ 和微信现在已经成为最为广泛的网络聊天工具,是一种全新的网络通信平台,可以同时支持好友网络聊天、文件与图片传输,以及在线电话、视频电话等多项功能。并且设置了地理定位辅助功能,使得整个聊天软件更具人性化。计算机通信方式的实现,以视频、语音对话代替了传统的通信方式,人们可以根据个人需求,选择最为合适的信息交流方式。MSN 为一种互联网即时消息软件,用户可以通过互联网来实现实时文字交流。并且可以自主选择和决定聊天对象,软件设计时设置了加密程序,能够设置阻止名单来预防不良用户的骚扰,提高软件应用的安全性。

    网络远程控制军事活动应用

    基于远程网络控制技术设计的卫星,作为一种高新通信技术,现在已经被广泛地应用到大地测量、石油勘测以及野外营救等领域,尤其是在军事领域的应用,侦察、监控效率更高,在实际应用中具有不可取代的作用。现在卫星多被用于定位,即将卫星定位功能的用户接收机安装在军用飞机、车辆以及舰船上,利用电子地图便可以确定运输工具所在位置,实时掌握其运行状态,便于进行安全监控,且可以提高调度的灵活性。想要充分发挥远程控制技术与计算机通信技术的优点,需要先有效接收终端导航定位信息,待信息处理后,采取一定格式将此类数据,利用无线电接收机传送到指挥中心。由中心接受所有数据后,进行分析和保存,且在专业处理后,在地图中有效定位运输工具以及物资所在实际位置。其中,GPS技术具有灵活性与精确度高等特点,现在已经被广泛应用到军事行业中。

    展开全文
  • “背景介绍随着 Amazon IoT 设备的普及,如何安全、灵活地管理对设备的控制权限变得更加复杂。以往简单的应用场景控制端 APP 仅仅需要使用 Amazon IoT 平台对一个...
  • 1 绪论 3 1.1 项目开发背景 3 1.2 项目开发意义 4 1.3 项目主要的内容 4 2 相关技术介绍及系统环境开发条件 5 2.1相关技术介绍 5 2.2系统环境开发条件 6 3 系统的需求分析与设计 7 ...4系统功能模块实现 1
  • 1.2 系统实现的内容和目标 4 1.3 开发工具的选择及相关技术介绍 4 1.3.1相关技术介绍 4 1.3.2系统环境开发工具 5 2 系统的需求总体分析 6 2.1可行性分析 9 2.2需求分析 10 2.2.1功能性需求 10 2.2.3流程图设计 11 ...
  • 权限管理实现思路?

    千次阅读 多人点赞 2021-12-07 12:54:44
    3.权限验证:通过token获取用户对应的权限,将请求的权限数组和用户信息存储到vuex ,动态根据用户的权限通过处理得到其对应有权限的路由,通过 router.addRoutes 动态添加这些路由。 一、登录: 登录成
  • 我们的FM预算管理方案,只是将其价值作为预算控制的标的。 资金(大成本概念)的流动,根据流入、流出的主体的参照系的不同选择,可以分为不同会计主体间的流动和同一会计主体内不同组织间的流动,这两种情况是...
  • 微信小程序的开发运用了微信开发者工具,设计并开发图书馆管理小程序,并实现了图书借阅管理、留言管理、图书馆占座管理、预约占座等功能,帮助学生有效减少了挑选和借阅图书的时间,并且可对图书馆提供意见的即时...
  • 户籍管理系统的设计与实现

    万次阅读 热门讨论 2016-10-26 03:00:50
    毕业设计说明书 ...户籍管理系统的设计与实现 专业 计算机科学与技术 学生姓名 郭 峰 班级 计算机121 学号 1210704106 指导教师 韩 立 毛 完成日期
  • 一般认为管理的职能包括计划、组织、领导、控制这四种基本职能。而管理职能就是管理活动要做的几类工作: ...组织工作是为了有效实现计划所确定的目标而组织进行部门划分、权利分配和工作协调
  • 简介: 上一期“谈AK管理之基础篇”,我们讲了如何规范的进行访问密钥生命周期管理。通过分出不同权限的阿里云RAM子账号,将不同的权限分给不同的用户,这样一旦子账号泄露也不会造成全局的信息泄露。但是,由于子...
  • 软件开发管理与质量控制

    万次阅读 2018-11-12 19:51:48
    软件开发管理与质量控制
  • 怎样通过4G网络实现PLC远程控制

    千次阅读 2020-02-26 09:22:31
    随着4G、5G无线网络的快速...因此工业设备通过4G网络来实现远程控制得到了快速的发展,且稳定性、可靠性完全可以满足常规的使用要求。 PLC是一种逻辑可编程控制器,因其可靠稳定,编程相对容易,工业控制上得到了...
  • Spring Security用户认证和权限控制(默认实现

    万次阅读 多人点赞 2019-03-28 13:58:02
    查询用户信息并封装成认证用户对象的过程是UserDetailsService接口的实现类(需要用户自己实现完成的。本示例的UserDetailsService接口实现类UserDetailsServiceImpl的代码如下所示: package com . ...
  • 了解了什么是MQTT以后,接下来了解一下怎么实现这个协议,也是对MQTT协议的解读和总结,这一小节主要是给出整体的架构图和连接管理,后续小节将详述发布管理和订阅管理两个重点模块。
  • PMP项目管理13个计划

    千次阅读 2019-06-14 09:57:50
    管理变更控制过程提供指导,记录变更控制委员会的情况。 内容:当项目需要变更的时候,如何进行变更。 2、配置管理计划 所属过程:制定项目管理计划 含义:定义配置项,定义需要正式变更控制的内容,并为这些配置项...
  • Spring Security用户认证和权限控制(自定义实现

    万次阅读 多人点赞 2019-03-29 10:04:48
    Spring Security用户认证和权限控制(自定义实现)1 说明2 用户认证相关的自定义实现2.1 自定义用户认证页面2.2 自定义退出功能2.3 自定义用户认证拦截器2.4 自定义用户认证处理器2.5 自定义用户认证对象2.6 自定义...
  • 一、项目管理系统 项目管理系统是管理项目所需的过程、工具、技术、方法、资源和程序的集合。 二、项目管理信息系统(project management information system
  • 基于SNMP网络管理系统的实现

    万次阅读 2016-06-12 16:02:43
    个推作为国内最专业的第三方消息推送技术解决方案的服务商接入SDK用户数高达90亿,日活跃用户达6.5...实际的运维环境,需要时刻对网络设备进行监控和管理,并包含了各种网络设备,包括交换机,路由器,服务器等等。
  • 可同时对方法多个数据源操作实现共同事务。 @RunWith ( SpringRunner . class ) @SpringBootTest ( classes = XXX . class ) public class RedisTest { @Autowired private RedisDAO ...
  • ipv6为每一个设备都标注了地址,因此可以直接使用ipv6访问内网的设备,实现与公网唯一ip一样的功能 从而可以实现远程ftp访问,远程控制实现个人私有云盘搭建。 买个4t的硬盘安装家里的电脑上,用ipv6实现内网...
  • 通过系统实现确保生产工艺流程平稳运行的前提下,实现企业能源系统的在线监控、集中管理与优化调度,从而有效地提高企业能源管理水平和能源利用效率,为单体设备、各生产装置和整个企业的多方位节能提供充分支撑...
  • springMvc+spring security 注解方式实现权限控制

    万次阅读 热门讨论 2018-08-22 16:46:26
    一个项目,权限自然是少不了的,我来公司一段时间后发现公司后台的管理系统既然没有权限模块,所有人都都是超级管理员,更让人嗤之以鼻的是,整个系统也没有任何操作日志记录,这怎么得了,数据是的何等重要,岂是...
  • 一个阶段的学习结束了,整理了之前的过程的学习成果,已经过了工作的年纪,这里稍微出一下自己做的一套永磁同步电机的教程,从基础的矢量控制,到应用性较强的MTPA、弱磁控制等,最后深入到无速度传感器的控制,...
  • 是指计划工作,越能了解和找到对达到目标起限制性和决定性作用的因素,就越能准确、客观的选择可行性方案。 计划工作( 87 识记): 即制定计划,就是根据组织内外部的实际情况,权衡客观需要和主观可能,通过...
  • 本博客分为两点,一个是spring事务实现原理源码解读(个人能力,初步解读),二是spring事务的传播属性   简单案例,保存订单,修改商品...调用方法时会扫描@Transactional,进入方法前会判断是否有注解(...
  • 本项目是使用Java swing开发,可实现仓库管理系统登陆/注册/重置、登录后可以进行系统管理、原料管理、成品管理管理记录以及注销退出等几大模块。界面设计比较简介、适合作为Java初学者课设设计以及学习技术使用...
  • 导读:近些年,ToDesk远程控制软件领域异军突起,作为国产软件,发展迅猛,的确有“两把刷子”。博主近一段时间,通过下载安装,测试了文件传输、远程打印、远程开机,尤其是远程控制帮助博主自己的粉丝解决了很多...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 574,160
精华内容 229,664
关键字:

在管理中如何实现有效控制