当前位置:

首页 > 编程开发 > Java Shiro安全框架的使用方法

Java Shiro安全框架的使用方法

1.shiro安全框架ApacheShiro是一个强大易用的Java安全框架,提供了认证、授权、加密和session会话管理等功能,对于任何一个应用程序,Shiro都可以提供全面的安全管理服务。并且相对于其他安全框架springsecurity,Shiro要简单的多。Shiro是apache旗下一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权、加密、会话管理等功能,组成了一个通用的安全认证框架。Shiro可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE环境,也

本文目录

      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 依赖
       
                  org.apache.shiro
                  shiro-core
                  1.9.0
              
      2.3.2 创建ini文件

      Java Shiro安全框架的使用方法

      2.3.3 测试代码
      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 修改代码

      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("请先认证");
              }
          }
      }
      本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
      作者最新文章
      编程开发 Java
      相关文章 更多
      Java单元测试入门:使用JUnit 5编写第一个测试用例
      Java单元测试入门:使用JUnit 5编写第一个测试用例

      面向初学者的JUnit 5实用入门指南。从测试概念、Maven依赖配置,到手把手编写首个单元测试用例及断言验证,助你掌握Java单元测试的核心流程。

      Java变量未初始化报错解析:局部变量与成员变量默认值差异
      Java变量未初始化报错解析:局部变量与成员变量默认值差异

      深入解析Java中局部变量未初始化编译报错与成员变量自动赋予默认值的机制差异,涵盖JVM内存分配、编译期确定性赋值检查与实际排查修复方案。

      Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat
      Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat

      详细讲解在Java中获取当前系统时间并进行格式化输出的两种核心方案:基于Java 8全新日期时间API的DateTimeFormatter与传统遗留的SimpleDateFormat,包含完整代码示例、线程安全机制对比及生产选型建议。

      Java中final与static final常量的定义及初始化规则
      Java中final与static final常量的定义及初始化规则

      深入解析Java中final变量与static final常量的定义、内存语义、初始化时机及合法赋值路径,涵盖编译期常量优化与实战避坑指南。

      Java抽象方法与接口方法的区别及选型建议
      Java抽象方法与接口方法的区别及选型建议

      深入对比Java中抽象类抽象方法与接口方法的语法演进、设计意图及运行期差异,并提供清晰的架构选型决策流程与实战范例。

      Java实现HTTP请求与JSON解析的完整代码示例
      Java实现HTTP请求与JSON解析的完整代码示例

      本文提供Java标准库HttpClient发起HTTP GET/POST请求并结合Jackson进行JSON数据反序列化与序列化的完整代码示例与工程实践指南。

      Java递归出现StackOverflowError的原因分析及栈空间优化方案
      Java递归出现StackOverflowError的原因分析及栈空间优化方案

      详细分析Java递归调用出现StackOverflowError的原因,结合代码说明线程栈、栈帧和递归深度之间的关系,并介绍终止条件排查、迭代改写、减少栈帧开销以及通过-Xss调整JVM栈空间的方法。

      Java空指针异常(NPE)的代码排查与修复实例
      Java空指针异常(NPE)的代码排查与修复实例

      针对Java中常见的NullPointerException(NPE),本文从堆栈日志定位、典型代码触发场景、具体修复代码对比到防御体系进行系统讲解,提供实用且易上手的排查与修复方案。

      selenium上传文件教程本地文件路径设置方法
      selenium上传文件教程本地文件路径设置方法

      深入解析Selenium处理文件上传的技术细节,涵盖标准HTML控件的路径直接注入法与非标准控件的系统级模拟方案,提供Windows与Linux环境下的路径设置最佳实践及常见异常排查。

      大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景
      大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景

      针对大数据工程场景,系统对比Java、Scala与Python在执行性能、生态结合、开发效率和维护成本上的核心差异,给出清晰的架构选型依据与落地方案。

      查看更多
      精品专题 更多
      装机必备
      装机必备

      正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

      Windows
      Windows

      正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

      PDF教程
      PDF教程

      正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

      Mac软件 更多
      讯飞智作 网页版
      讯飞智作 网页版
      Windows/ macOS/ Linux

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      火山引擎 网页版
      火山引擎 网页版
      Windows/ macOS/ Linux

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      Aperty macOS版
      Aperty macOS版
      macOS

      Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

      WINDOWS 更多
      讯飞智作 网页版
      讯飞智作 网页版
      Windows/ macOS/ Linux

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      火山引擎 网页版
      火山引擎 网页版
      Windows/ macOS/ Linux

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      PixTV 网页版
      PixTV 网页版
      Windows

      PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。