Apache Shiro参考手册中文版进制编码,但可以使用 Base64 编码代替 16 进制编码来配置(见下面)。 一旦你指定了文本密码散列值,你得告诉 Shiro 这些都是加密的。你可以通过配置在[main] section 中隐式地创建 iniRealm 来使用合适的 CredentialsMatcher 实现来对应到你所指定的哈希算法: 你可以像任何其他对象一样在 CredentialsMatcher 这里需要重要注意的是 Shiro 不关心你是如何获取此信息的:也许获得的数据是由用户提交的一个 HTML 表单, 或者是从 HTTP 头中捕获,或者它是从一个 Swing 或 Flex GUI 密码表单,或者通过命令行参数。从终端用户收 集信息的过程与 Shiro 的 Authentication Token 概念是不挂钩的。 你可以创建和实例化你喜欢的 Authentication Token 实例——它是与协议无关的。 Strategy 基于程序需要作出合适的决定。 AuthenticationStrategy 是一个无状态的组件,它在身份验证尝试中被询问 4 次(这 4 次交互所需的任何必要的 状态将被作为方法参数): 1. 在任何 Realm 被调用之前被询问; 2. 在一个单独的 Realm 的 getAuthenticationInfo 方法被调用之前立即被询问; 3. 在一个单独的 Realm0 码力 | 92 页 | 1.16 MB | 1 年前3
基于 Java EE 的企业应用系统设计 - Spring MVC 02Employee 对象。有了 StringToDateConverter,就不 需要在 controller 类中将字符串转换成日期了。 saveEmployee 方法的 BindingResult 参数中放置了 Spring 的所有 绑定错误。该方法利用 BindingResult 记录所有绑定错误。绑定错 误也可以利用 errors 标签显示在一个表单中,如 EmployeeForm.jsp 中 ]} ▶ ${object.propertyName} 大纲 转换器和格式化(Converter and Formatter) 验证器 表达式语言(EL) JSTL 表达式语言(示例) 访问隐式对象 HTTP host 的 EL 表达式 ▶ ${header["host"]} ▶ ${header.host} 访问 accept-language 的 EL 表达式1 ${heade 转换器和格式化(Converter and Formatter) 验证器 表达式语言(EL) JSTL 表达式语言(示例) 访问 pageContext.request.servletPath 的 EL 表达式 隐式对象 pageContext 是表示当前 JSP 的 PageContext 对象,其 HttpServletRequest request 属性带有 servletPath 属性,下列几个表 达式的结果相同:0 码力 | 56 页 | 866.07 KB | 1 年前3
Apache Shiro 1.2.x Reference Manual 中文翻译任何应用程序 Apache Shiro设计从一开始就支持任何应用程序——从最小的命令行应用程序最大的集群 web 应用程序。对于本教程,尽管我们创建一个简单的应用程序,你都知道运用相同的使用模 式来进行应用程序创建或部署。 本教程需要 Java 1.5 或更高版本。 我们还将使用 Apache Maven 作为我们的构建工具,当然 这对于 Apache Shiro 来说不是必须使用。你可能获得 Shiro 并不关心你如何获取这些信息:也许是用户从一个HTML表单中提交的,或者可能 从一个 HTTP 请求字串中解析的,也可能来自于Swing或者 Flex GUI 的密码表单,或者通过 命令行参数得到。从程序终端用户获取信息的过程与 Shiro 的 AuthenticationToken 完全无 关。 你可以随自己喜欢构造和引用 AuthenticationToken 实例 -- 这是协议无关的。 恰当的决定。 AuthenticationStrategy 是一个 stateless 的组件,在整个验证过程中在被用到4次(在这4次 活动中需要必要的 state 时,state 将作为方法参数传递) 1.在任何 Realms 被执行之前; 2.在某个的 Realm 的 getAuthenticationInfo 方法调用之前; 3.在某个的 Realm 的 getAuthenticationInfo0 码力 | 196 页 | 2.34 MB | 1 年前3
跟我学Shiro - 张开涛.......................................................................... 184 第二十三章 多项目集中权限管理及分布式会话 ....................................................................... 191 部署架构............... 来管理主体与应用之间交互的数据;这样的话,比如我们在 Web 环境用,刚开始是一台 Web 服务器;接着又上了台 EJB 服务器;这时想把两台服务器的会话数据放到一个地方, 这个时候就可以实现自己的分布式会话(如把数据放到 Memcached 服务器); SessionDAO:DAO 大家都用过,数据访问对象,用于会话的 CRUD,比如我们想把 Session 保存到数据库,那么可以实现自己的 SessionDAO,通过如 也需要从 Realm 得到用户相应的角色/权限进行验证用户是否能进行操作;可以把 Realm 看 成 DataSource , 即 安 全 数 据 源 。 如 我 们 之 前 的 ini 配 置 方 式 将 使 用 org.apache.shiro.realm.text.IniRealm。 org.apache.shiro.realm.Realm 接口如下: 跟我学 Shiro—0 码力 | 219 页 | 4.16 MB | 10 月前3
《Java 应用与开发》课程讲义 - 王晓东. . 65 6.3.1 Java 垃圾回收机制 . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 6.3.2 JVM 内存溢出和参数调优 . . . . . . . . . . . . . . . . . . . . . . . 65 6.3.3 内存优化的小示例 . . . . . . . . . . . . . . . . . . 93 9.2 命令行参数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 9.2.1 命令行参数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 9.2.2 可变参数方法 . . . . . . . 5.1 Servlet 声明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 16.5.2 Servlet 初始参数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 16.5.3 Servlet 启动时机 . . . . . . . .0 码力 | 330 页 | 6.54 MB | 1 年前3
Java 应用与开发 - HTTP 会话跟踪技术服务器必须使用某种技术保存客户的信息。 大纲 会话基本概念 会话跟踪技术 本节习题 Java EE Web 会话跟踪方法 1. 重写 URL 将客户端的信息附加在请求 URL 地址的参数中, Web 服务器取得参数信息,完成客户端信息的保存。 2. 隐藏表单字段 将要保存的客户信息,如用户登录账号使用 隐藏表单字段发送到服务器端,完成 Web 服务器保持客户 状态信息。 3. Cookie 使用 浏览器端构造 URL 请求 ▶ 在进行 HTTP 请求时,可以在 URL 地址后直接附加请求 参数,把客户端的数据传输到 Web 服务器端。 ▶ Web 服务器通过 HttpServletRequest 请求对象取得这些 URL 地址后面附加的请求参数。 ▶ 这种 URL 地址后附加参数的方式称为 URL 重写。 URL 重写示例 1 参数数据 大纲 会话基本概念0 码力 | 54 页 | 824.47 KB | 1 年前3
Hello 算法 1.1.0 Java版1. 递:程序不断深入地调用自身,通常传入更小或更简化的参数,直到达到“终止条件”。 2. 归:触发“终止条件”后,程序从最深层的递归函数开始逐层返回,汇聚每一层的结果。 而从实现的角度看,递归代码主要包含三个要素。 1. 终止条件:用于决定什么时候由“递”转“归”。 2. 递归调用:对应“递”,函数调用自身,通常输入更小或更简化的参数。 3. 返回结果:对应“归”,将当前递归层级的结果返回至上一层。 return n + res; } 图 2‑3 展示了该函数的递归过程。 图 2‑3 求和函数的递归过程 虽然从计算角度看,迭代与递归可以得到相同的结果,但它们代表了两种完全不同的思考和解决问题的范 式。 ‧ 迭代:“自下而上”地解决问题。从最基础的步骤开始,然后不断重复或累加这些步骤,直到任务完成。 ‧ 递归:“自上而下”地解决问题。将原问题分解为更小的子问题,这些子问题和原问题具有相同的形式。 尾递归:递归调用是函数返回前的最后一个操作,这意味着函数返回到上一层级后,无须继续执行其他 操作,因此系统无须保存上一层函数的上下文。 以计算 1 + 2 + ⋯ + ? 为例,我们可以将结果变量 res 设为函数参数,从而实现尾递归: // === File: recursion.java === /* 尾递归 */ int tailRecur(int n, int res) { // 终止条件 if0 码力 | 378 页 | 18.47 MB | 1 年前3
Hello 算法 1.0.0 Java版1. 递:程序不断深入地调用自身,通常传入更小或更简化的参数,直到达到“终止条件”。 2. 归:触发“终止条件”后,程序从最深层的递归函数开始逐层返回,汇聚每一层的结果。 而从实现的角度看,递归代码主要包含三个要素。 1. 终止条件:用于决定什么时候由“递”转“归”。 2. 递归调用:对应“递”,函数调用自身,通常输入更小或更简化的参数。 3. 返回结果:对应“归”,将当前递归层级的结果返回至上一层。 return n + res; } 图 2‑3 展示了该函数的递归过程。 图 2‑3 求和函数的递归过程 虽然从计算角度看,迭代与递归可以得到相同的结果,但它们代表了两种完全不同的思考和解决问题的范 式。 ‧ 迭代:“自下而上”地解决问题。从最基础的步骤开始,然后不断重复或累加这些步骤,直到任务完成。 ‧ 递归:“自上而下”地解决问题。将原问题分解为更小的子问题,这些子问题和原问题具有相同的形式。 尾递归:递归调用是函数返回前的最后一个操作,这意味着函数返回到上一层级后,无须继续执行其他 操作,因此系统无须保存上一层函数的上下文。 以计算 1 + 2 + ⋯ + ? 为例,我们可以将结果变量 res 设为函数参数,从而实现尾递归: // === File: recursion.java === /* 尾递归 */ int tailRecur(int n, int res) { // 终止条件 if0 码力 | 376 页 | 17.59 MB | 1 年前3
Hello 算法 1.0.0b5 Java版1. 递:程序不断深入地调用自身,通常传入更小或更简化的参数,直到达到“终止条件”。 2. 归:触发“终止条件”后,程序从最深层的递归函数开始逐层返回,汇聚每一层的结果。 而从实现的角度看,递归代码主要包含三个要素。 1. 终止条件:用于决定什么时候由“递”转“归”。 2. 递归调用:对应“递”,函数调用自身,通常输入更小或更简化的参数。 3. 返回结果:对应“归”,将当前递归层级的结果返回至上一层。 return n + res; } 图 2‑3 展示了该函数的递归过程。 图 2‑3 求和函数的递归过程 虽然从计算角度看,迭代与递归可以得到相同的结果,但它们代表了两种完全不同的思考和解决问题的范 式。 ‧ 迭代:“自下而上”地解决问题。从最基础的步骤开始,然后不断重复或累加这些步骤,直到任务完成。 ‧ 递归:“自上而下”地解决问题。将原问题分解为更小的子问题,这些子问题和原问题具有相同的形式。 尾递归:递归调用是函数返回前的最后一个操作,这意味着函数返回到上一层级后,无需继续执行其他 操作,因此系统无需保存上一层函数的上下文。 以计算 1 + 2 + ⋯ + ? 为例,我们可以将结果变量 res 设为函数参数,从而实现尾递归。 // === File: recursion.java === /* 尾递归 */ int tailRecur(int n, int res) { // 终止条件 if0 码力 | 376 页 | 30.69 MB | 1 年前3
Hello 算法 1.0.0b4 Java版n; i++) { for (int j = 0; j < n + 1; j++) { System.out.println(0); } } } 第二步:判断渐近上界 时间复杂度由多项式 ?(?) 中最高阶的项来决定。这是因为在 ? 趋于无穷大时,最高阶的项将发挥主导作用, 其他项的影响都可以被忽略。 以下表格展示了一些例子,其中一些夸张的值是为了强调“系数无法撼动阶数”这一结论。当 C# 等)都不支持自动优化尾递归,因此一般来说空间复杂度是 ?(?) 。 � 函数和方法这两个术语的区别是什么? 函数(function)可以独立被执行,所有参数都以显式传递。方法(method)与一个对象关 联,方法被隐式传递给调用它的对象,方法能够对类的实例中包含的数据进行操作。 因此,C 和 Go 只有函数,Java 和 C# 只有方法,在 C++, Python 中取决于它是否属于一个类。 标准,32‑bit 长度的 float 由以下 部分构成: ‧ 符号位 S :占 1 bit 。 ‧ 指数位 E :占 8 bits 。 ‧ 分数位 N :占 24 bits ,其中 23 位显式存储。 设 32‑bit 二进制数的第 ? 位为 ?? ,则 float 值的计算方法定义为: val = (−1)?31 × 2(?30?29…?23)2−127 × (1.?22?21 … ?0)20 码力 | 342 页 | 27.39 MB | 1 年前3
共 43 条
- 1
- 2
- 3
- 4
- 5













