zoukankan      html  css  js  c++  java
  • shiro权限框架-入门基础

                             shiro权限框架

    首先Shiro较之 Spring Security,Shiro在保持强大功能的同时,还在简单性灵活性方面拥有巨大优势。

    Shiro是一个强大而灵活的开源安全框架,能够非常清晰的处理认证、授权、管理会话以及密码加密。如下是它所具有的特点:

    1. 易于理解的 Java Security API;
    2. 简单的身份认证(登录),支持多种数据源(LDAP,JDBC,Kerberos,ActiveDirectory 等);
    3. 对角色的简单的签权(访问控制),支持细粒度的签权;
    4. 支持一级缓存,以提升应用程序的性能;
    5. 内置的基于 POJO 企业会话管理,适用于 Web 以及非 Web 的环境;
    6. 异构客户端会话访问;
    7. 非常简单的加密 API;
    8. 不跟任何的框架或者容器捆绑,可以独立运行。

    首先想使用一个插件必不可少的就是他的jar包!

    这里我推荐版本较高的shiro-core  1.5.0的版本

    包导入成功后直接带大家进入一个简单的案例让了解shiro的登录和权限判断简单的认识shiro的强大功能

    首先创建一个空的maven项目

    注意:这里创建空的maven项目无需勾选webapp前端,前期先带大家了解一下shiro的运行流程暂且不涉及业务层

    在这和大家扯一个题外话,可能大家创建了很多次maven项目时都不知道里面的groupID和ArtifactID是什么意思

    groupid和artifactId被统称为“坐标”是为了保证项目唯一性如果你要把你项目弄到maven本地仓库去,你想要找到你的项目就必须根据这两个id去查找。

    创建成功后会得到一个这样的空maven项目

    首先在resources文件夹中编写一个后缀名为.ini的文件,.ini为后缀名的文件是项目中的配置文件,是整个项目共用的!

    编写完文件中的内容后下面进入测试类测试shiro权限框架自带的登录判断和权限判断

    我把shiro的登录判断分为了6步

    //1.获取shiro.ini的信息获得工厂Factory<SecurityManager>
    //2.初始化SecurityManager
    //3.SecurityUtils.set将SecurityManager绑定到SecurityUtils
    //4.Subject currentUser=SecurityUtils.getSubject();
    //5. UsernameAndPasswordToken token =new UsernamePasswordToken("username","password")
    //6.   subject.login(token);//1.若不报异常,则认证成功;2.若报异常则认证失败

    首先你需要知道的是当你使用了shiro权限框架,就无需再去编写登录判断的方法
    //5. UsernameAndPasswordToken token =new UsernamePasswordToken("username","password")

    下面上代码
    
    
    //1.获取shiro.ini的信息获取factory工厂
    Factory<SecurityManager>securityManagerFactory = new IniSecurityManagerFactory("classpath:shiro.ini");

    //2.初始化SecurityManager
    SecurityManager securityManager = securityManagerFactory.getInstance();

    //3.SecurityUtils.set将SecurityManager绑定到SecurityUtils
    SecurityUtils.setSecurityManager(securityManager);

    //4.Subject
    Subject subject = SecurityUtils.getSubject();
    Session session = subject.getSession();
    session.setAttribute("message","loginTest");

    if(!subject.isAuthenticated()) {
    //5.UsernameAndPasswordToken
    UsernamePasswordToken token = new UsernamePasswordToken("root", "secret");
    try {
    token.setRememberMe(true);
    subject.login(token);
    System.out.println("认证成功");

    System.out.println("谁登录了:"+subject.getPrincipal());
    if(subject.hasRole("admin")){
    System.out.println("该"+subject.getPrincipal()+"具备admin角色");
    }else{
    System.out.println("该"+subject.getPrincipal()+"不具备admin角色");
    }

    //判断当前用户是否具备某个操作的权限
    //若是在controller层 user/login user/add user/delete
    //正准备做删除操作,在方法中,在删除之前,进行权限的认证
    if(subject.isPermitted("admin:add")){
    System.out.println("具备新增的权限");
    }else{
    System.out.println("不具备新增的权限");
    }

    }catch (Exception e){
    System.out.println("认证失败");
    }
    }
    //登出
    subject.logout();

    }
     

    虽然知道了大致流程,但大家肯定不理解其中的方法是什么意思,下面我给大家一一解释

    getInstance():获取实例
    setSecurityManager():设置安全管理器
    getSubject():获取对象
    isAuthenticated():已通过身份认证
    setRememberMe():设置记住我
    login():登录(shiro中的角色令牌)
    getPrincipal():获取登录角色
    hasRole():具有什么角色
    isPermitted():被允许使用什么权限
    logout():登出(退出登录)


    今天讲解的只是shiro权限框架中很简单的入门基础,下期将会讲解配合前端业务层来使用,预知后事如何,请看下集!
  • 相关阅读:
    学习笔记
    博客园css
    linux命令随时添加
    spring注解
    springboot常用注解
    Ubuntu(16.04)安装Redis
    Mac OS 10.15 虚拟机安装(提供镜像,安装VMware tools,更改分辨率)
    SSM-员工管理项目实战-CRUD-增删改查
    蓝桥杯 2014届真题 地宫取宝 动态规划解法
    设计模式-工厂方法模式 实战演习 代码实现
  • 原文地址:https://www.cnblogs.com/www-dzsblogs-com/p/14541612.html
Copyright © 2011-2022 走看看