跟我学Shiro - 张开涛tion:*”或者 “organization:*:*”。可以这么理解,这种方式实现了前缀匹配。 另外如“user:*”可以匹配如“user:delete”、“user:delete”可以匹配如“user:delete:1”、 “user:*:1”可以匹配如“user:view:1”、“user”可以匹配“user:view”或“user:view:1” 等 。 即 *可 以 匹 配 所 有 , 匹 配 “system:user:view”,需要使用“*:*:view”,即后缀匹配必须指定前缀(多个冒号就需要 多个*来匹配)。 7、WildcardPermission 如下两种方式是等价的: 因此没什么必要的话使用字符串更方便。 8、性能问题 通配符匹配方式比字符串相等匹配来说是更复杂的,因此需要花费更长时间,但是一般系 统的权限不会太多,且可以配合缓存 统的权限不会太多,且可以配合缓存来提供其性能,如果这样性能还达不到要求我们可以 实现位操作算法实现性能更好的权限匹配。另外实例级别的权限验证如果数据量太大也不 建议使用,可能造成查询权限及匹配变慢。可以考虑比如在 sql 查询时加上权限字符串之 类的方式在查询时就完成了权限匹配。 role75=user:*:* subject().checkPermissions("user:view:1", "user:auth:2");0 码力 | 219 页 | 4.16 MB | 10 月前3
Apache Shiro 1.2.x Reference Manual 中文翻译tory 加载了我们的shiro.ini 文件,该文件存在于 classpath 根目录里。这个执行动作反映出 shiro 支持 Factory Method Design Pattern(工厂模式)。classpath:资源的指示前缀,告诉 shiro 从哪里加载 ini 文件(其 它前缀,如 url:和 file: 也被支持)。 2.factory.getInstance() 方法被调用,该方法分析 uae ) { //username 不存在,给个错误提示? } catch ( IncorrectCredentialsException ice ) { //password 不匹配,再输入? } catch ( LockedAccountException lae ) { //账号锁住了,不能登入。给个提示? } ... 更多类型异常 ... } catch 18 2. Tutorial 教程 3. Architecture 架构 Apache Shiro 设计理念是使程序的安全变得简单直观而易于实现,Shiro的核心设计参照大多 数用户对安全的思考模式--如何对某人(或某事)在与程序交互的环境中的进行安全控制。 程序设计通常都以用户故事为基础,也就是说,你会经常设计用户接口或服务api基于用户如何 (或应该)与软件交互。 例如,你可能会说,“如果我的应用程序的用户交互是登录0 码力 | 196 页 | 2.34 MB | 1 年前3
Apache Shiro参考手册中文版Apache Shiro 从开始的那天起就被设计成能够支持任何应用程序——从最小的命令 行应用程序到最大的群集 Web 应用程序。即使我们为该教程创建的是一个简单的应 用,了解相同的使用模式适用于无论你的应用程序是怎样创建的及它被部署到哪里。 该教程需要 Java 1.5 及更高本。我们也使用 Apache Maven 作为我们的构建工具,但当然这不是使用 Apache Shiro 这里是上面增加的代码所做的: 1. 我们使用 Shiro 的 IniSecurityManager 实现来提取我们的 shiro.ini 文件,它位于 classpath 的根目录。该实现反 映了 Shiro 对工厂设计模式的支持。classpath: 前缀是一个资源定位符,用来告诉 shiro 去哪加载 ini 文件(其 他前缀,如 url:和 file:也同样被支持)。 2. factory.getInstance()方法被调用,它来解析 是为了满足用户的要求和需要。即使该“用户”是另一个软件系统 而不是一个人类,你仍然得编写代码来响应行为,基于当前与你的软件进行交互的人或物。 Shiro 在它自己的设计中体现了这些概念。通过匹配那些对于软件开发人员来说已经很直观的东西,Apache Shiro 几 乎在任何应用程序保持了直观和易用性。 High-Level Overview 在最高的概念层次,Shiro 的架构有0 码力 | 92 页 | 1.16 MB | 1 年前3
Java 应用与开发 - 面向对象编程进阶static 关键字 final 学习目标 1. 理解多态和虚方法调用的概念,掌握其用法 2. 掌握方法重载的方法 3. 掌握 static 属性、方法和初始化块的用法 4. 了解设计模式,掌握单例设计模式 5. 掌握 final 关键字的概念和使用方法 大纲 多态性 方法重载 关键字 static 关键字 final 大纲 多态性 方法重载 关键字 static 关键字 final final 大纲 多态性 方法重载 关键字 static 关键字 final 什么是多态? 在 Java 中,子类的对象可以替代父类的对象使用称为多态。 O Java 引用变量与所引用对象间的类型匹配关系 ▶ 一个对象只能属于一种确定的数据类型,该类型自对象创建 直至销毁不能改变。 ▶ 一个引用类型变量可能引用(指向)多种不同类型的对象 ——既可以引用其声明类型的对象,也可以引用其声明类型 Person类型变量p 大纲 多态性 方法重载 关键字 static 关键字 final 什么是多态? 在 Java 中,子类的对象可以替代父类的对象使用称为多态。 O Java 引用变量与所引用对象间的类型匹配关系 ▶ 一个对象只能属于一种确定的数据类型,该类型自对象创建 直至销毁不能改变。 ▶ 一个引用类型变量可能引用(指向)多种不同类型的对象 ——既可以引用其声明类型的对象,也可以引用其声明类型0 码力 | 49 页 | 659.74 KB | 1 年前3
《Java 应用与开发》课程讲义 - 王晓东5.3.3 静态导入 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 5.3.4 Singleton 设计模式 . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 5.4 关键字 final . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 11.5.5 JTable 和 JTree 的 MVC 模式 . . . . . . . . . . . . . . . . . . . . . . 148 11.5.6 定时器 . . . . . . . . . . . . . . . . . . . 211 16.1.1 什么是 Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 16.1.2 Web 工作模式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 16.1.3 Java Web 应用的构成 . . . . . .0 码力 | 330 页 | 6.54 MB | 1 年前3
Java 应用与开发 - Servlet 编程大纲 Web 基础 Servlet 概述 Servlet 编程 Servlet 生命周期 Servlet 配置 Servlet 部署 Servlet 示例 学习目标 1. 理解 Web 的概念及工作模式,掌握 Java Web 应用的构成。 2. 掌握 Servlet 的概念、体系结构及生命周期管理基本原理。 3. 掌握 Servlet 的编程及配置方法,了解 Servlet 的在 Tomcat 30/software/jdk.zip 大纲 Web 基础 Servlet 概述 Servlet 编程 Servlet 生命周期 Servlet 配置 Servlet 部署 Servlet 示例 Web 工作模式 Web 使用请求/响应模式进行工作,Web 服务器不会主动将 Web 文档发送到客户端。 1. 由客户(一般是浏览器)使用 URL 对 Web 文档进行请求; 2. Web 服务器接收并处理请求; 3. 处理结束后将响应内容发送到客户。 处理结束后将响应内容发送到客户。 大纲 Web 基础 Servlet 概述 Servlet 编程 Servlet 生命周期 Servlet 配置 Servlet 部署 Servlet 示例 Web 工作模式 ▶ Web 请求方式主要有GET、POST、PUT、DELETE 和 HEAD。 ▶ Web 响应一般情况下是 HTML 文档,也可以是其他类型资 源。 ▶ Web 使用 MIME (Multipurpose0 码力 | 50 页 | 725.36 KB | 1 年前3
Nacos架构&原理
Spring-cloud-alibaba 生态进行推广,建立阿里 DNS(Dubbo+Nacos+Spring- cloud-alibaba/Seata/Sentinel)微服务最佳实践。 随着我们选择三合⼀的开源模式,又面临另外⼀个问题,未来内部和商业化关系是什么,代码关系 是什么? 这个问题应该说⼀直持续,但是我们定下来开源、自研、商业化三位⼀体的战略,以开源为内核, 以商业化为扩展;开源做生态,商业化 HTTP 接口,简单易用,方便多语言集成。 Console:易用控制台,做服务管理、配置管理等操作。 SDK:多语言 SDK,目前几乎支持所有主流编程语言。 Agent:Sidecar 模式运行,通过标准 DNS 协议与业务解耦。 CLI:命令行对产品进行轻量化管理,像 git ⼀样好用。 业务层 服务管理:实现服务 CRUD,域名 CRUD,服务健康状态检查,服务权重管理等功能。 日志模块:管理日志分类,日志级别,日志可移植性(尤其避免冲突),日志格式,异常码+帮 助文档。 回调机制:SDK 通知数据,通过统⼀的模式回调用户处理。接口和数据结构需要具备可扩展性。 寻址模式:解决 Server IP 直连,域名访问,Nameserver 寻址、广播等多种寻址模式,需要可 扩展。 推送通道:解决 Server 与存储、Server 间、Server 与 SDK 间高效通信问题。0 码力 | 326 页 | 12.83 MB | 9 月前3
Hello 算法 1.1.0 Java版} // 直接遍历数组元素 for (int num : nums) { count += num; } } 6. 查找元素 在数组中查找指定元素需要遍历数组,每轮判断元素值是否匹配,若匹配则输出对应索引。 因为数组是线性数据结构,所以上述查找操作被称为“线性查找”。 // === File: array.java === /* 在数组中查找指定元素 */ int find(int[] 载机制。 ‧ 缓存行:缓存不是单个字节地存储与加载数据,而是以缓存行为单位。相比于单个字节的传输,缓存行 的传输形式更加高效。 ‧ 预取机制:处理器会尝试预测数据访问模式(例如顺序访问、固定步长跳跃访问等),并根据特定模式 将数据加载至缓存之中,从而提升命中率。 ‧ 空间局部性:如果一个数据被访问,那么它附近的数据可能近期也会被访问。因此,缓存在加载某一数 据时,也会加载其附近的数据,以提高命中率。 占用空间:链表元素比数组元素占用空间更多,导致缓存中容纳的有效数据量更少。 ‧ 缓存行:链表数据分散在内存各处,而缓存是“按行加载”的,因此加载到无效数据的比例更高。 ‧ 预取机制:数组比链表的数据访问模式更具“可预测性”,即系统更容易猜出即将被加载的数据。 ‧ 空间局部性:数组被存储在集中的内存空间中,因此被加载数据附近的数据更有可能即将被访问。 总体而言,数组具有更高的缓存命中率,因此它在操作0 码力 | 378 页 | 18.47 MB | 1 年前3
Hello 算法 1.0.0 Java版} // 直接遍历数组元素 for (int num : nums) { count += num; } } 6. 查找元素 在数组中查找指定元素需要遍历数组,每轮判断元素值是否匹配,若匹配则输出对应索引。 因为数组是线性数据结构,所以上述查找操作被称为“线性查找”。 // === File: array.java === /* 在数组中查找指定元素 */ int find(int[] 载机制。 ‧ 缓存行:缓存不是单个字节地存储与加载数据,而是以缓存行为单位。相比于单个字节的传输,缓存行 的传输形式更加高效。 ‧ 预取机制:处理器会尝试预测数据访问模式(例如顺序访问、固定步长跳跃访问等),并根据特定模式 将数据加载至缓存之中,从而提升命中率。 ‧ 空间局部性:如果一个数据被访问,那么它附近的数据可能近期也会被访问。因此,缓存在加载某一数 据时,也会加载其附近的数据,以提高命中率。 占用空间:链表元素比数组元素占用空间更多,导致缓存中容纳的有效数据量更少。 ‧ 缓存行:链表数据分散在内存各处,而缓存是“按行加载”的,因此加载到无效数据的比例更高。 ‧ 预取机制:数组比链表的数据访问模式更具“可预测性”,即系统更容易猜出即将被加载的数据。 ‧ 空间局部性:数组被存储在集中的内存空间中,因此被加载数据附近的数据更有可能即将被访问。 总体而言,数组具有更高的缓存命中率,因此它在操作0 码力 | 376 页 | 17.59 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Java 版} // 直接遍历数组元素 for (int num : nums) { count += num; } } 6. 查找元素 在数组中查找指定元素需要遍历数组,每轮判断元素值是否匹配,若匹配则输出对应索引。 因为数组是线性数据结构,所以上述查找操作被称为“线性查找”。 // === File: array.java === /* 在数组中查找指定元素 */ int find(int[] 载机制。 ‧ 缓存行:缓存不是单个字节地存储与加载数据,而是以缓存行为单位。相比于单个字节的传输,缓存行 的传输形式更加高效。 ‧ 预取机制:处理器会尝试预测数据访问模式(例如顺序访问、固定步长跳跃访问等),并根据特定模式 将数据加载至缓存之中,从而提升命中率。 ‧ 空间局部性:如果一个数据被访问,那么它附近的数据可能近期也会被访问。因此,缓存在加载某一数 据时,也会加载其附近的数据,以提高命中率。 占用空间:链表元素比数组元素占用空间更多,导致缓存中容纳的有效数据量更少。 ‧ 缓存行:链表数据分散在内存各处,而缓存是“按行加载”的,因此加载到无效数据的比例更高。 ‧ 预取机制:数组比链表的数据访问模式更具“可预测性”,即系统更容易猜出即将被加载的数据。 ‧ 空间局部性:数组被存储在集中的内存空间中,因此被加载数据附近的数据更有可能即将被访问。 总体而言,数组具有更高的缓存命中率,因此它在操作0 码力 | 379 页 | 18.48 MB | 10 月前3
共 26 条
- 1
- 2
- 3













