Gemini永久会员 Shiro是一个功能强大且易于使用的Java安全框架,提供了认证、授权、加密和会话管理等功能

Gemini永久会员    Shiro是一个功能强大且易于使用的Java安全框架,提供了认证、授权、加密和会话管理等功能

Shiro是一个功能强大且易于使用的Java安全框架,提供了认证、授权、加密和会话管理等功能,以下是对其核心用法及关键组件的详细介绍:

一、核心组件

  1. Subject(主体):代表当前操作的“用户”,可能是实际用户、程序或定时任务等。通过SecurityUtils.getSubject()获取当前Subject,所有安全操作(如登录、权限校验)都通过Subject触发。
  2. SecurityManager(安全管理器):Shiro的“大脑”,负责协调所有安全组件(认证、授权、会话等),是Shiro的核心调度中心。开发者无需直接操作SecurityManager,只需通过Subject间接调用其功能。
  3. Realm(领域):Shiro的“数据源接口”,负责从数据库、缓存、配置文件等地方获取用户信息(如账号密码、权限列表)。认证时,Realm提供用户的真实凭证;授权时,Realm提供用户的权限集合。自定义Realm是Shiro灵活适配业务的关键。
  4. Authenticator(认证器):对用户登录时进行身份认证,验证用户提供的凭证是否与系统存储的凭证一致。
  5. Authorizer(授权器):用户通过认证器认证通过后,在访问功能时需要通过授权器判断用户是否有此功能的操作权限。
  6. SessionManager(会话管理器):管理用户会话的组件,适用于Web以及非Web的环境。
  7. CacheManager(缓存管理器):管理用户身份、权限、角色等的缓存,以提高访问性能。
  8. Cryptography(加密管理器):提供加密方式的设计及管理,保护数据的安全性。

二、基本用法

  1. 环境搭建
    • 添加依赖:在项目的pom.xml文件中添加Shiro的依赖,如shiro-coreshiro-web等。
    • 配置文件:可以通过INI文件、XML文件或数据库等方式配置用户信息、角色信息和权限信息。
  2. 登录认证
    • 收集用户身份、凭证(如用户名、密码)。
    • 调用Subject.login方法进行登录,如果失败将得到相应的AuthenticationException异常,根据异常提示用户错误信息;否则登录成功。
    • 创建自定义的Realm类,继承org.apache.shiro.realm.AuthenticatingRealm类,实现doGetAuthenticationInfo()方法,用于从数据源中获取用户信息进行认证。
  3. 角色授权
    • 定义角色和权限:在配置文件中或通过编程方式定义角色和权限。
    • 检查用户角色:使用Subject.hasRole()方法检查用户是否拥有某个角色。
    • 自定义Realm授权:继承org.apache.shiro.realm.AuthorizingRealm类,实现doGetAuthorizationInfo()方法,用于从数据源中获取用户角色信息进行授权。
  4. 权限授权
    • 定义权限:权限通常表示为“资源:操作”的格式,如“user:add”表示新增用户的权限。
    • 检查用户权限:使用Subject.isPermitted()方法检查用户是否拥有某个权限。
  5. 加密解密
    • Shiro提供了多种加密算法,如MD5、SHA等,用于密码加密存储到数据库,而不是明文存储。
    • 使用SimpleHash类进行加密操作,可以指定加密算法、盐值、迭代次数等参数。

三、示例代码

  1. 登录认证示例
importorg.apache.shiro.SecurityUtils;importorg.apache.shiro.authc.AuthenticationException;importorg.apache.shiro.authc.UsernamePasswordToken;importorg.apache.shiro.config

Read more

Flutter 组件 conduit_open_api 的适配 鸿蒙Harmony 实战 - 驾驭 API 标准化生产、实现鸿蒙端自动契约生成与文档自愈治理方案

Flutter 组件 conduit_open_api 的适配 鸿蒙Harmony 实战 - 驾驭 API 标准化生产、实现鸿蒙端自动契约生成与文档自愈治理方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 conduit_open_api 的适配 鸿蒙Harmony 实战 - 驾驭 API 标准化生产、实现鸿蒙端自动契约生成与文档自愈治理方案 前言 在鸿蒙(OpenHarmony)生态的大规模前后端协同系统、提供开放能力的政务数据网关以及需要严格对齐 0307 批次 API 审计标准的各类大型应用开发中,“接口契约的高保真度与文档同步效率”是决定研发链条能否高效转动的核心。面对包含上百个微服务的复杂系统。如果依然采用基于“手写 Word/WIKI 文档”的传统协同模式。不仅会导致代码与文档之间产生严重的逻辑偏离(Logic Drift),更会因为缺乏一套可被程序自动解析的“契约标准(OpenAPI/Swagger)”,引发鸿蒙端 UI 开发人员在面对接口变更时的重复调试与返工。 我们需要一种“代码为源、契约自愈”的治理艺术。

By Ne0inhk
ARM Linux 驱动开发篇--- Linux 并发与竞争实验(互斥体实现 LED 设备互斥访问)--- Ubuntu20.04互斥体实验

ARM Linux 驱动开发篇--- Linux 并发与竞争实验(互斥体实现 LED 设备互斥访问)--- Ubuntu20.04互斥体实验

🎬 渡水无言:个人主页渡水无言 ❄专栏传送门: 《linux专栏》《嵌入式linux驱动开发》《linux系统移植专栏》 ❄专栏传送门: 《freertos专栏》《STM32 HAL库专栏》 ⭐️流水不争先,争的是滔滔不绝  📚博主简介:第二十届中国研究生电子设计竞赛全国二等奖 |国家奖学金 | 省级三好学生 | 省级优秀毕业生获得者 | ZEEKLOG新星杯TOP18 | 半导纵横专栏博主 | 211在读研究生 在这里主要分享自己学习的linux嵌入式领域知识;有分享错误或者不足的地方欢迎大佬指导,也欢迎各位大佬互相三连 目录 前言  一、实验基础说明 1.1、互斥体简介 1.2 本次实验设计思路 二、硬件原理分析(看过之前博客的可以忽略) 三、实验程序编写 3.1 互斥体 LED 驱动代码(mutex.c) 3.2.1、设备结构体定义(28-39

By Ne0inhk
[linux仓库]线程池[线程·玖]

[linux仓库]线程池[线程·玖]

🌟 各位看官好,我是! 🌍 Linux == Linux is not Unix ! 🚀 今天来手搓一个线程池以便清晰明白线程池设计的巧妙。 👍 如果觉得这篇文章有帮助,欢迎您一键三连,分享更多人哦! 目录 书接上文 线程池设计 线程池 应用场景 种类 线程描述与组织 线程管理 线程池 构造函数 线程启动、取消与回收 线程取消 任务执行 回收线程 往线程池入数据 书接上文 线程池设计 线程池 ⼀种线程使⽤模式。线程过多会带来调度开销,进⽽影响缓存局部性和整体性能。⽽线程池维护着多个线程,等待着监督管理者分配可并发执⾏的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利⽤,还能防⽌过分调度。可⽤线程数量应该取决于可⽤的并发处理器、处理器内核、内存、⽹络sockets等的数量。 应用场景 * 需要⼤

By Ne0inhk
08-OpenClaw自动化与定时任务

08-OpenClaw自动化与定时任务

OpenClaw 自动化与定时任务 免费专栏全套教程:OpenClaw从入门到精通 OpenClaw 提供了一套完整的自动化系统,包括 Heartbeat 心跳机制、Cron 定时任务、Hooks 事件钩子和 Webhook 外部触发。本章将详细介绍这些机制的概念、配置和实战应用。 目录 1. 自动化工作流概念 2. Heartbeat 心跳机制 3. Cron 定时任务配置 4. Hooks 事件钩子 5. Webhook 外部触发 6. 实战案例 7. 故障排查 1. 自动化工作流概念 1.1 核心组件 OpenClaw 的自动化系统由四个核心组件构成: 组件用途触发方式适用场景Heartbeat周期性检查自动定时批量检查、上下文感知监控Cron精确定时任务时间驱动固定时间执行、独立任务Hooks事件驱动响应事件触发命令响应、生命周期管理Webhook外部系统集成HTTP 请求第三方系统对接、推送接收 1.

By Ne0inhk