Apache Shiro参考手册中文版SecurityManager 实例。 Configuration 虽然我们能够直接实例化一个 SecurityManager 类,但 Shiro 的 SecurityManager 实现有足够的配置选项及内置组件 使得在 Java 源代码做这件事情变得较为痛苦——如果使用一个灵活的基于文本的配置格式来配置 SecurityManager, 那么这将是一件很容易的事情。 为此,Shiro 通过基于文本的 XML(Spring,JBoss,Guice 等等),YAML,JSON,Groovy Builder markup,以及更多配置被一起配置。INI 文件只是 Shiro 的“共性”格式,他 它允许任何环境下的配置,除非其他选项不可用。 shiro.ini 因此,我们将为这个简单的应用程序使用 INI 文件来配置 Shiro SecurityManager。首先,在 pom.xml 所在的同一目录 下创建 src/main/resources 一些问题,如果多个启用 Shiro 的应用程序在同一个 JVM 中运 行。如果该实例是一个应用程序单例,而不是一个静态内存引用就再好不过了。 每当你想改变 Shiro 配置时,它需要你重新编译你的应用程序。 然而,即使有这么多警告,直接的编程操作方法在内存受限的环境中仍然是有价值的,如智能手机应用。若你的应 用程序不在一个内存受限的环境下运行,你会发现基于文本的配置要更容易使用和阅读。0 码力 | 92 页 | 1.16 MB | 1 年前3
Apache Shiro 1.2.x Reference Manual 中文翻译SecurityManager 实例。 Configuration 配置 虽然我们可以直接对 SecurityManager 实例化,但在 Java 代码中对Shiro 的 SecurityManager 所须的选项和内部组件进行配置会让人感觉有点小痛苦--而将这些 SecurityManager 配置用一个灵活的配置文件实现就会简单地多。 为此,Shiro 默认提供了一个基本的 INI 配置文件的解决方案,人们已经对庞大的 实例化为虚拟机的单独静 态实例,在大多数程序中没有问题,但如果有多个使用 Shiro 的程序在同一个 JVM 中运 行时,各程序有自己独立的实例会更好些,而不是共同引用一块静态内存。 改变配置就需要重新编译你的程序。 然而,尽管有这些不足,在程序中定制的这种方法在限制内存(memory-constrained )的环 境中还是很有价值的,像智能电话程序。如果你的程序不是运行在一个限制内存的环境中, info"。 没有权限的角色 如果你有不需要权限的角色,不需要将它们列入[roles]区域,仅仅在 [users]区域定义角色名 就可以创建它们(如果它们尚不存在)。 [urls] 该区域选项将在Web章节讨论。 为文档加把手 我们希望这篇文档可以帮助你使用 Apache Shiro 进行工作,社区一直在不断地完善和扩展文 档,如果你希望帮助 Shiro 项目,请在你认为需要的地方考虑更正、扩展或添加文档,你提供0 码力 | 196 页 | 2.34 MB | 1 年前3
Java 应用与开发 - 类加载和反射动态语言。从这个观点看,Perl、Python、Ruby 是动态语 言,C++、Java、C# 不是动态语言。 ▶ 但是 Java 有着一个非常突出的动态相关机制:反射 (Reflection),可以于运行时加载、探知、使用编译期间完 全未知的类。换句话说,Java 程序可以加载一个运行时才 得知名称的类,获悉其完整构造(但不包括 methods 定义), 并生成其对象实体、或对其 fields 设值、或唤起调用其 methods。 使用反射生成并操作对象 本节习题 反射机制 ▶ 反射机制是 Java 语言在运行时所拥有的一项自观能力。通 过这种能力可以彻底的了解自身的情况为下一步的动作做准 备。 ▶ 反射机制是在运行状态(而不是编译状态)时: ▶ 判断任意一个对象所属的类; ▶ 构造任意一个类的对象; ▶ 判断任意一个类所具有的成员变量和方法(通过反射甚至可 以调用 private 方法); ▶ 调用任意一个对象的方法。 类的加载、连接和初始化 类加载器 使用反射生成并操作对象 本节习题 反射的主要用途 O 一个常见的场景 当我们在使用 IDE(如 Eclipse)时,当我们输入一个对象或类 并想调用它的属性或方法,一按点号,编译器就会自动列出它的 属性或方法,这里就会用到反射。 大纲 反射 类的加载、连接和初始化 类加载器 使用反射生成并操作对象 本节习题 反射的主要用途 O 反射最重要的用途就是开发各种通用框架0 码力 | 46 页 | 714.40 KB | 1 年前3
Hello 算法 1.1.0 Java版元,则收银员需要找我们 31 元。他 会很自然地完成如图 1‑3 所示的思考。 1. 可选项是比 31 元面值更小的货币,包括 1 元、5 元、10 元、20 元。 2. 从可选项中拿出最大的 20 元,剩余 31 − 20 = 11 元。 3. 从剩余可选项中拿出最大的 10 元,剩余 11 − 10 = 1 元。 4. 从剩余可选项中拿出最大的 1 元,剩余 1 − 1 = 0 元。 5. 完成找零,方案为 。 图 2‑4 递归调用深度 在实际中,编程语言允许的递归深度通常是有限的,过深的递归可能导致栈溢出错误。 2. 尾递归 有趣的是,如果函数在返回前的最后一步才进行递归调用,则该函数可以被编译器或解释器优化,使其在空 间效率上与迭代相当。这种情况被称为尾递归(tail recursion)。 ‧ 普通递归:当函数返回到上一层级的函数后,需要继续执行代码,因此系统需要保存上一层调用的上下 普通递归:求和操作是在“归”的过程中执行的,每层返回后都要再执行一次求和操作。 ‧ 尾递归:求和操作是在“递”的过程中执行的,“归”的过程只需层层返回。 图 2‑5 尾递归过程 Tip 请注意,许多编译器或解释器并不支持尾递归优化。例如,Python 默认不支持尾递归优化,因此即 使函数是尾递归形式,仍然可能会遇到栈溢出问题。 3. 递归树 当处理与“分治”相关的算法问题时,递归往往比迭代的0 码力 | 378 页 | 18.47 MB | 1 年前3
Hello 算法 1.0.0 Java版元,则收银员需要找我们 31 元。他 会很自然地完成如图 1‑3 所示的思考。 1. 可选项是比 31 元面值更小的货币,包括 1 元、5 元、10 元、20 元。 2. 从可选项中拿出最大的 20 元,剩余 31 − 20 = 11 元。 3. 从剩余可选项中拿出最大的 10 元,剩余 11 − 10 = 1 元。 4. 从剩余可选项中拿出最大的 1 元,剩余 1 − 1 = 0 元。 5. 完成找零,方案为 。 图 2‑4 递归调用深度 在实际中,编程语言允许的递归深度通常是有限的,过深的递归可能导致栈溢出错误。 2. 尾递归 有趣的是,如果函数在返回前的最后一步才进行递归调用,则该函数可以被编译器或解释器优化,使其在空 间效率上与迭代相当。这种情况被称为「尾递归 tail recursion」。 ‧ 普通递归:当函数返回到上一层级的函数后,需要继续执行代码,因此系统需要保存上一层调用的上下 普通递归:求和操作是在“归”的过程中执行的,每层返回后都要再执行一次求和操作。 ‧ 尾递归:求和操作是在“递”的过程中执行的,“归”的过程只需层层返回。 图 2‑5 尾递归过程 � 请注意,许多编译器或解释器并不支持尾递归优化。例如,Python 默认不支持尾递归优化, 因此即使函数是尾递归形式,仍然可能会遇到栈溢出问题。 3. 递归树 当处理与“分治”相关的算法问题时,递归往往比迭代的0 码力 | 376 页 | 17.59 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Java 版元,则收银员需要找我们 31 元。他 会很自然地完成如图 1‑3 所示的思考。 1. 可选项是比 31 元面值更小的货币,包括 1 元、5 元、10 元、20 元。 2. 从可选项中拿出最大的 20 元,剩余 31 − 20 = 11 元。 3. 从剩余可选项中拿出最大的 10 元,剩余 11 − 10 = 1 元。 4. 从剩余可选项中拿出最大的 1 元,剩余 1 − 1 = 0 元。 5. 完成找零,方案为 。 图 2‑4 递归调用深度 在实际中,编程语言允许的递归深度通常是有限的,过深的递归可能导致栈溢出错误。 2. 尾递归 有趣的是,如果函数在返回前的最后一步才进行递归调用,则该函数可以被编译器或解释器优化,使其在空 间效率上与迭代相当。这种情况被称为尾递归(tail recursion)。 ‧ 普通递归:当函数返回到上一层级的函数后,需要继续执行代码,因此系统需要保存上一层调用的上下 普通递归:求和操作是在“归”的过程中执行的,每层返回后都要再执行一次求和操作。 ‧ 尾递归:求和操作是在“递”的过程中执行的,“归”的过程只需层层返回。 图 2‑5 尾递归过程 Tip 请注意,许多编译器或解释器并不支持尾递归优化。例如,Python 默认不支持尾递归优化,因此即 使函数是尾递归形式,仍然可能会遇到栈溢出问题。 3. 递归树 当处理与“分治”相关的算法问题时,递归往往比迭代的0 码力 | 379 页 | 18.48 MB | 10 月前3
Hello 算法 1.0.0b5 Java版元,则收银员需要找我们 31 元。他 会很自然地完成如图 1‑3 所示的思考。 1. 可选项是比 31 元面值更小的货币,包括 1 元、5 元、10 元、20 元。 2. 从可选项中拿出最大的 20 元,剩余 31 − 20 = 11 元。 3. 从剩余可选项中拿出最大的 10 元,剩余 11 − 10 = 1 元。 4. 从剩余可选项中拿出最大的 1 元,剩余 1 − 1 = 0 元。 5. 完成找零,方案为 。 图 2‑4 递归调用深度 在实际中,编程语言允许的递归深度通常是有限的,过深的递归可能导致栈溢出报错。 2. 尾递归 有趣的是,如果函数在返回前的最后一步才进行递归调用,则该函数可以被编译器或解释器优化,使其在空 间效率上与迭代相当。这种情况被称为「尾递归 tail recursion」。 ‧ 普通递归:当函数返回到上一层级的函数后,需要继续执行代码,因此系统需要保存上一层调用的上下 ‧ 普通递归:求和操作是在“归”的过程中执行的,每层返回后都要再执行一次求和操作。 ‧ 尾递归:求和操作是在“递”的过程中执行的,“归”的过程只需层层返回。 图 2‑5 尾递归过程 请注意,许多编译器或解释器并不支持尾递归优化。例如,Python 默认不支持尾递归优化,因此即使函数 是尾递归形式,但仍然可能会遇到栈溢出问题。 3. 递归树 当处理与“分治”相关的算法问题时,递归往往比迭代0 码力 | 376 页 | 30.69 MB | 1 年前3
Nacos架构&原理
化。Nacos 经过阿里内部锤炼十年以上,各项指标已经及其先进,稳定,为服务 好全球开发者,Nacos 经过数十名工程师持续努力,以开源形式和大家见面,相信 Nacos ⼀定能在 分布式领域成为开发者的首选项。 9 > 前言 前⾔ 序⾔ 阿里做开源大概有两个阶段,第⼀个阶段是 2018 年之前,取之于开源,反哺于社区,开源是⼀种 情怀,是⼀种文化,是⼀种展示技术影响力和技术实力的方式,包括我在内很多阿里技术人都是因 properties 文件进行挂载来完成参数的配置, 文件在容器的文件位置:/home/nacos/c onf/applicaion.properties. 141 > Nacos 生态 属性名称 描述 选项 MODE 系统启动方式: 集 群/单机 cluster/standalone 默认 cluster NACOS_SERVERS 集群地址 ip1:port1 空格 ip2:port2 空格 f8&connectTimeout=1000&soc ketTimeout=3000&autoReconn ect=true&useSSL=false Nacos 生态 < 142 属性名称 描述 选项 MYSQL_DATABASE_NUM It indicates the number of data base 默认 :1 JVM_XMS -Xms 默认 :1g JVM_XMX -Xmx0 码力 | 326 页 | 12.83 MB | 9 月前3
Hello 算法 1.0.0b4 Java版元,则收银员需要给我们找 31 元。他会很自然地完成以下思考: 1. 可选项是比 31 元面值更小的货币,包括 1 , 5 , 10 , 20 元。 2. 从可选项中拿出最大的 20 元,剩余 31 − 20 = 11 元。 3. 从剩余可选项中拿出最大的 10 元,剩余 11 − 10 = 1 元。 4. 从剩余可选项中拿出最大的 1 元,剩余 1 − 1 = 0 元。 5. 完成找零,方案为 ‧「暂存数据」用于保存算法运行过程中的各种常量、变量、对象等。 ‧「栈帧空间」用于保存调用函数的上下文数据。系统在每次调用函数时都会在栈顶部创建一个栈帧,函 数返回后,栈帧空间会被释放。 ‧「指令空间」用于保存编译后的程序指令,在实际统计中通常忽略不计。 因此,在分析一段程序的空间复杂度时,我们一般统计 暂存数据、输出数据、栈帧空间 三部分。 Figure 2‑9. 算法使用的相关空间 /* 类 */ 度。链表则不然,计算机只能挨个地缓存各个节点,这样的多次“搬运”降低了整体效率。 4.4.1. Q & A � 数组存储在栈上和存储在堆上,对时间效率和空间效率是否有影响? 栈内存分配由编译器自动完成,而堆内存由程序员在代码中分配(注意,这里的栈和堆和数据 结构中的栈和堆不是同一概念)。 1. 栈不灵活,分配的内存大小不可更改;堆相对灵活,可以动态分配内存。 2. 栈是一块比较小0 码力 | 342 页 | 27.39 MB | 1 年前3
Java 应用与开发 - Java 技术概述及开发环境Java1.1 Java1.2 Java2 J2SE J2ME J2EE 标准版,开发适用于PC上运行的程序 微缩版,开发适用于手机等嵌入式设备的程序 企业版,开发适用于服务器端的程序 引入内部类和即时编译(Just-In-Time,JIT)技术 引入Swing 2000.5 2002.2 2004.10 2006.11 J2SE1.3 J2SE1.4 J2SE1.5 J2SE5.0 平台无关性 分布式 可靠性 多线程 网络编程 编译和解释并存 大纲 Java 技术概述 Java 平台核心机制 Java 开发环境 Java 基本开发流程 Java 技术的特点 面向对象 平台无关性 分为源代码级(需重新编译源代码,如 C/C++) 和目标代码级 (Java) 平台无关。 分布式 可靠性 多线程 网络编程 编译和解释并存 大纲 Java 技术概述 Java 平台核心机制 平台核心机制 Java 开发环境 Java 基本开发流程 Java 技术的特点 面向对象 平台无关性 分布式 可靠性 多线程 网络编程 编译和解释并存 大纲 Java 技术概述 Java 平台核心机制 Java 开发环境 Java 基本开发流程 Java 技术的特点 面向对象 平台无关性 分布式 可靠性 不支持直接操作指针,避免了对内存的非法访问; 自动单元回收功能防止内存丢失等动态内存分配导0 码力 | 33 页 | 1.17 MB | 1 年前3
共 27 条
- 1
- 2
- 3













