目录
1.shiro安全框架
1.1 什么是权限管理
1.2 什么是身份认证
1.3 什么是授权
1.4 认证授权框架有哪些
2.使用shiro完成认证工作
2.1 shiro中认证的关键对象
2.2 认证流程
2.3 项目代码
2.3.1 依赖
2.3.2 创建ini文件
2.3.3 测试代码
2.4 认证的原理
3.授权
3.1 修改ini文件
3.2 修改代码
首页 Java java教程 Java shiro安全框架如何使用

Java shiro安全框架如何使用

May 03, 2023 am 11:22 AM
java shiro

    1.shiro安全框架

    Apache Shiro 是一个强大易用的 Java 安全框架,提供了认证、授权、加密和session会话管理等功能,对于任何一个应用程序,Shiro 都可以提供全面的安全管理服务。并且相对于其他安全框架spring security,Shiro 要简单的多。

    Shiro是apache旗下一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权、加密、会话管理等功能,组成了一个通用的安全认证框架。

    Shiro可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE环境,也可以用在JavaEE环境。Shiro可以帮助我们完成:认证、授权、加密、会话管理、与Web集成、缓存等。

    1.1 什么是权限管理

    基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源。

    权限管理包括用户身份认证和授权两部分,简称认证授权。对于需要访问控制的资源用户首先经过身份认证,认证通过后用户具有该资源的访问权限方可访问。

    1.2 什么是身份认证

    身份认证,就是判断一个用户是否为合法用户的处理过程。最常用的简单身份认证方式是系统通过核对用户输入的用户名和口令,看其是否与系统中存储的该用户的用户名和口令一致,来判断用户身份是否正确。对于采用指纹等系统,则出示指纹;对于硬件Key等刷卡系统,则需要刷卡。

    1.3 什么是授权

    授权,即访问控制,控制谁能访问哪些资源。主体进行身份认证后需要分配权限方可访问系统的资源,对于某些资源没有权限是无法访问的 .

    1.4 认证授权框架有哪些

    shiro框架和spring security框架 这款框架是现在市面比较流行。

    2.使用shiro完成认证工作

    2.1 shiro中认证的关键对象

    Subject:主体访问系统的用户,主体可以是用户、程序等,进行认证的都称为主体;

    Principal:身份信息----账号是主体(subject)进行身份认证的标识,标识必须具有唯一性,如用户名、手机号、邮箱地址等,一个主体可以有多个身份,但是必须有一个主身份(Primary Principal)。

    credential:凭证信息---密码是只有主体自己知道的安全信息,如密码、证书等。

    2.2 认证流程

    Java shiro安全框架如何使用

    2.3 项目代码

    1.先不用数据库来进行身份认证,--我们ini文件,window系统文件,该文件中可以存放账号和密码。

    (1) 创建一个maven java工程

    2.3.1 依赖

    1

    2

    3

    4

    5

    <dependency>

               <groupId>org.apache.shiro</groupId>

               <artifactId>shiro-core</artifactId>

               <version>1.9.0</version>

           </dependency>

    登录后复制
    2.3.2 创建ini文件

    Java shiro安全框架如何使用

    2.3.3 测试代码

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    public class Test01 {

        public static void main(String[] args) {

            //1.获取SecurityManager对象

            DefaultSecurityManager securityManager=new DefaultSecurityManager();

            //2.读取ini文件

            IniRealm iniRealm=new IniRealm("classpath:shiro.ini");

            //3。设置securityManager的realm

            securityManager.setRealm(iniRealm);

            //4.设置securityManager上下文生效

            SecurityUtils.setSecurityManager(securityManager);

            //5.获取subject的主体对象

            Subject subject=SecurityUtils.getSubject();

            try{

                //UsernamePasswordToken作用是封装你输入的账号和密码 是客户自己输入的 用来进行比较与realm

                UsernamePasswordToken token=new UsernamePasswordToken("admin","123456");

                //抛出异常 比对shiro中realm和自己的对比,如果一致则登录成功,不一致则登录失败

                subject.login(token);

                System.out.println("登陆成功");

            }catch(Exception e){

                e.printStackTrace();

                System.out.println("登陆失败");

            }

        }

    }

    登录后复制

    2.4 认证的原理

    Java shiro安全框架如何使用

    Subject: 主题 登录信息提交给SecurityManager --->认证器Authenticator---->根据你的realm提供的数据进行相关的认证。 realm---与数据源交互的类。

    3.授权

    Java shiro安全框架如何使用

    Java shiro安全框架如何使用

    3.1 修改ini文件

    Java shiro安全框架如何使用

    3.2 修改代码

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    public class Test01 {

        public static void main(String[] args) {

            //1.获取SecurityManager对象

            DefaultSecurityManager securityManager=new DefaultSecurityManager();

            //2.读取ini文件

            IniRealm iniRealm=new IniRealm("classpath:shiro.ini");

            //3。设置securityManager的realm

            securityManager.setRealm(iniRealm);

            //4.设置securityManager上下文生效

            SecurityUtils.setSecurityManager(securityManager);

            //5.获取subject的主体对象

            Subject subject=SecurityUtils.getSubject();

            try{

                //UsernamePasswordToken作用是封装你输入的账号和密码 是客户自己输入的 用来进行比较与realm

                UsernamePasswordToken token=new UsernamePasswordToken("admin","123456");

                //抛出异常 比对shiro中realm和自己的对比,如果一致则登录成功,不一致则登录失败

                subject.login(token);

                System.out.println("登陆成功");

            }catch(Exception e){

                e.printStackTrace();

                System.out.println("登陆失败");

            }

            System.out.println("=========================登陆后===========================");

            boolean authenticated = subject.isAuthenticated();

            if(authenticated){

                //判断当前登录者是否具有user:query权限

                boolean permitted = subject.isPermitted("user:update");

                System.out.println(permitted);

                //从角色角度

                boolean role1 = subject.hasRole("role1");

                System.out.println(role1);

            }else {

                System.out.println("请先认证");

            }

        }

    }

    登录后复制

    以上是Java shiro安全框架如何使用的详细内容。更多信息请关注PHP中文网其他相关文章!

    本站声明
    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    热门文章

    仓库:如何复兴队友
    3 周前 By 尊渡假赌尊渡假赌尊渡假赌
    Hello Kitty Island冒险:如何获得巨型种子
    3 周前 By 尊渡假赌尊渡假赌尊渡假赌
    两个点博物馆:所有展览以及在哪里可以找到它们
    3 周前 By 尊渡假赌尊渡假赌尊渡假赌

    热门文章

    仓库:如何复兴队友
    3 周前 By 尊渡假赌尊渡假赌尊渡假赌
    Hello Kitty Island冒险:如何获得巨型种子
    3 周前 By 尊渡假赌尊渡假赌尊渡假赌
    两个点博物馆:所有展览以及在哪里可以找到它们
    3 周前 By 尊渡假赌尊渡假赌尊渡假赌

    热门文章标签

    记事本++7.3.1

    记事本++7.3.1

    好用且免费的代码编辑器

    SublimeText3汉化版

    SublimeText3汉化版

    中文版,非常好用

    禅工作室 13.0.1

    禅工作室 13.0.1

    功能强大的PHP集成开发环境

    Dreamweaver CS6

    Dreamweaver CS6

    视觉化网页开发工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神级代码编辑软件(SublimeText3)

    Java 中的平方根 Java 中的平方根 Aug 30, 2024 pm 04:26 PM

    Java 中的平方根

    Java 中的完美数 Java 中的完美数 Aug 30, 2024 pm 04:28 PM

    Java 中的完美数

    Java 中的随机数生成器 Java 中的随机数生成器 Aug 30, 2024 pm 04:27 PM

    Java 中的随机数生成器

    Java 中的阿姆斯特朗数 Java 中的阿姆斯特朗数 Aug 30, 2024 pm 04:26 PM

    Java 中的阿姆斯特朗数

    Java中的Weka Java中的Weka Aug 30, 2024 pm 04:28 PM

    Java中的Weka

    Java Spring 面试题 Java Spring 面试题 Aug 30, 2024 pm 04:29 PM

    Java Spring 面试题

    突破或从Java 8流返回? 突破或从Java 8流返回? Feb 07, 2025 pm 12:09 PM

    突破或从Java 8流返回?

    Java 中的史密斯数 Java 中的史密斯数 Aug 30, 2024 pm 04:28 PM

    Java 中的史密斯数

    See all articles