Apache Shiro参考手册中文版该尽可能掩盖复杂的地方,露出一个干净而直观的 API,来简化开发人员在使他们的应用程序安全上的努力。 以下是你可以用 Apache Shiro 所做的事情: 验证用户来核实他们的身份 对用户执行访问控制,如: 判断用户是否被分配了一个确定的安全角色 判断用户是否被允许做某事 在任何环境下使用 Session API,即使没有 Web 或 EJB 容器。 该程序 所能够做到全部事情是打印出文本"My First Apache Shiro Application"并退出。 Test Run 要试用我们的教程应用程序,请在你的教程项目的根目录下执行以下的命令提示符,并键入以下内容: mvn compile exec:java 然后你将看到我们的 little 教程“程序”运行并退出。你应该会看到与下面相似的一些东西(注意粗体文本,它显 Spring,Guice 后 JBoss DI 容器实例)。 Using Shiro 现在我们的 SecurityManager 已经设置好并可以使用了,现在我们能够开始做一些我们真正关心的事情——执行安 全操作。 当保护我们的应用程序时,我们对自己可能提出的最为相关的问题是“当前用户是谁”或“当前用户是否被允许做 XXX”。当我们编写代码或设计用户接口时,问这些问题是很常见的:应用程序通常是基于用户的背景情况建立的,0 码力 | 92 页 | 1.16 MB | 1 年前3
Apache Shiro 1.2.x Reference Manual 中文翻译Test Run 测试运行 Apache Shiro 1.2.x Reference Manual 中文翻译 9 2. Tutorial 教程 在教程项目的根目录(如 shiro-tutorial )执行以下命令提示符中,输入以下: mvn compile exec:java 你就会看到我们的小教程应用程序的运行和退出。 您应当会看到类似于下面的输出(译者 注:红框中的内容) 我们已经验证了应用程序成功运行——现在让我们使 setSecurityManager(securityManager); System.exit(0); } 这就是我们要做的--仅仅使用三行代码就把Shiro加进了我们的程序,就是这么简单。 执行mvn compile exec:java 可以看到程序成功的运行(由于 Shiro 默认在 debug 或更底层才 记录日志,所以你不会看到任何 Shiro 的日志输出--只要运行时没有错误提示,你就可以知道 上面所加入的代码做了下面的事情: 1. 使用 Shiro 的 IniSecurityManagerFactory 加载了我们的shiro.ini 文件,该文件存在于 classpath 根目录里。这个执行动作反映出 shiro 支持 Factory Method Design Pattern(工厂模式)。classpath:资源的指示前缀,告诉 shiro 从哪里加载 ini 文件(其 它前缀,如0 码力 | 196 页 | 2.34 MB | 1 年前3
跟我学Shiro - 张开涛都绑定 到 SecurityManager,与 Subject 的所有交互都会委托给 SecurityManager;可以把 Subject 认 为是一个门面;SecurityManager 才是实际的执行者; SecurityManager:安全管理器;即所有与安全有关的操作都会与 SecurityManager 交互; 且它管理着所有 Subject;可以看出它是 Shiro 的核心,它负责与后边介绍的其他组件进行 查看/新增/修改/删除用户数据(即很多时候都是 CRUD(增查改删)式权限控制) 打印文档等等。。。 如上可以看出,权限代表了用户有没有操作某个资源的权利,即反映在某个资源上的操作 允不允许,不反映谁去执行这个操作。所以后续还需要把权限赋予给用户,即定义哪个用 户允许在某个资源上做什么操作(权限),Shiro 不会去做这件事情,而是由实现人员提供。 Shiro 支持粗粒度权限(如用户模块的所有 的访问控制(Resource-Based Access Control)”。 授权方式 Shiro 支持三种方式的授权: 编程式:通过写 if/else 授权代码块完成: 注解式:通过在执行的 Java 方法上放置相应的注解完成: 没有权限将抛出相应的异常; JSP/GSP 标签:在 JSP/GSP 页面通过相应的标签完成: 后续部分将详细介绍如何使用。0 码力 | 219 页 | 4.16 MB | 10 月前3
Nacos架构&原理
void delete(byte[] key) throws KvStorageException; ... } 由于 Nacos 的服务模块存储,更多的都是根据单个或者多个唯⼀ key 去执行点查的操作,因此 Key-Value 类型的存储接口最适合不过。而 Key-Value 的存储接口定义好之后,其实就是这个 KVStore 的具体实现了。可以直接将 KVStore 的实现对接 Redis,也可以直接对接 port 信息计算其所属的 Distro 责任节点, 并将该请求转发到所属的 Distro 责任节点上。 责任节点上的 Controller 将写请求进行解析。 Distro 协议定期执行 Sync 任务,将本机所负责的所有的实例信息同步到其他节点上。 读操作 由于每台机器上都存放了全量数据,因此在每⼀次读操作中,Distro 机器会直接从本地拉取数据。 快速响应。 41 > 的需求同样强烈。服 务端健康检查最常见的方式是 TCP 端口探测和 HTTP 接口返回码探测,这两种探测方式因为其协 议的通用性可以支持绝大多数的健康检查场景。在其他⼀些特殊的场景中,可能还需要执行特殊的 接口才能判断服务是否可用。例如部署了数据库的主备,数据库的主备可能会在某些情况下切换, 73 > Nacos 架构 需要通过服务名对外提供访问,保证当前访问的库是主库。此时的健康检查接口,可能就是⼀个检0 码力 | 326 页 | 12.83 MB | 10 月前3
《Java 应用与开发》课程讲义 - 王晓东. . . . . . . . . . . . . . . . . . . . . 278 23.1.3 JSP 的执行过程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 23.1.4 JSP 执行过程描述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 20.1 重定向和转发的区别 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 xx 23.1 JSP 的执行过程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 23.2 inlcude 动作和指令的差异 . . 没有内置的多线程机制,需调用操作系统的多线程功能来进行多线程序设 计;Java 提供了多线程支持。 网络编程 Java 具有丰富的网络编程库。 编译和解释并存 由编译器将 Java 源程序编译成字节码文件,再由运行系统解释执行 字节码文件(解释器将字节码再翻译成二进制码运行)。 1.2 Java 平台核心机制 Java 技术栈如图1.2所示,程序的编译运行过程如图1.3所示。需要了解以下几个核 心概念: • Java0 码力 | 330 页 | 6.54 MB | 1 年前3
MySQL ZIP Archive版本安装说明. 2017/11/06 22:33.. 定位到解压目录的bin目录下,执行初始化以下命令: 注意:执行初始化命令前需要正确创建data目录并确保该目录为空。 执行MySQL服务安装命令: 注意:安装成功则给出提示。 执行启动MySQL服务命令: 也可以通过在开始菜单上点击右键选择 - 计算机管理 - 服务和应用程序 - 服务,找到MySQL服务,在此完成服务启动及 服务已成功停⽌止。 C:\MySQL\mysql-5.7.20-winx64\bin>mysqld.exe --skip-grant-tables 在2号命令行窗口中定位到MySQL安装目录的bin目录下,执行mysql.exe,则无密码登录到MySQL数据库,并输出 MySQL命令行操作符。 进行修改密码操作,MySQL命令行输入以下命令: 其中,yourpassword位置即为所设置的MySQL的 登录。 MySQL服务启动成功后,在命令行提示符执行mysql.exe -u root -p即可以以刚才修改的root用户登录密码登录 MySQL。 接下来,如果在MySQL命令提示符下执行诸如以下操作: 提示ERROR,必须重新为MySQL用户设置最终的密码,输入exit退出当前MySQL提示符状态。然后,在Windows命 令行提示符执行: C:\MySQL\mysql-5.7.20-winx64\bin>mysql 0 码力 | 4 页 | 756.23 KB | 1 年前3
Java 应用与开发 - 类加载和反射进程的内存区。当系统出现以下几种情况时, JVM 进程将被终止: ▶ 程序运行至正常结束。 ▶ 程序运行到使用 System.exit() 或 Runtime.getRuntime().exit() 代码结束程序。 ▶ 程序执行过程中遇到未捕获的异常或者错误而结束。 ▶ 程序所在的平台强制结束了 JVM 进程。 O JVM 初始化类的步骤 当程序主动使用某个类时,如果该类还未被加载到内存中,JVM 会通过加载 ³ 连接 进程的内存区。当系统出现以下几种情况时, JVM 进程将被终止: ▶ 程序运行至正常结束。 ▶ 程序运行到使用 System.exit() 或 Runtime.getRuntime().exit() 代码结束程序。 ▶ 程序执行过程中遇到未捕获的异常或者错误而结束。 ▶ 程序所在的平台强制结束了 JVM 进程。 O JVM 初始化类的步骤 当程序主动使用某个类时,如果该类还未被加载到内存中,JVM 会通过加载 ³ 连接 类的加载、连接和初始化 类加载器 使用反射生成并操作对象 本节习题 类的初始化时机 当使用 ClassLoader 类的 loadClass() 方法来加载某个类时,该 方法只是加载该类,并不会执行该类的初始化。 1 ClassLoader cl = ClassLoader.getSystemClassLoader(); 2 cl.loadClass("Tester"); 当使用 Class0 码力 | 46 页 | 714.40 KB | 1 年前3
Hello 算法 1.0.0b1 Java版的字,一般我们会这样做: 1. 打开字典大致一半页数的位置,查看此页的首字母是什么(假设为 ? ); 2. 由于在英文字母表中 ? 在 ? 的后面,因此应排除字典前半部分,查找范围仅剩后半部分; 3. 循环执行步骤 1‑2 ,直到找到拼音首字母为 ? 的页码时终止。 1. 引言 hello‑algo.com 9 Figure 1‑1. 查字典步骤 查字典这个小学生的标配技能,实际上就是大名鼎鼎的「二 系列指令看作是「二分查找」算法。 小到烹饪一道菜、大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现,使我们可以通过编程将 数据结构存储在内存中,也可以编写代码来调用 CPU, GPU 执行算法,从而将生活中的问题搬运到计算机中, 更加高效地解决各式各样的复杂问题。 � 读到这里,如果你感到对数据结构、算法、数组、二分查找等此类概念一知半解,那么就太好 了!因为这正是本书存在的 储的数据,以及操作数据的对应方法。 ‧ 算法是数据结构发挥的舞台。数据结构仅存储数据信息,结合算法才可解决特定问题。 ‧ 算法有对应最优的数据结构。给定算法,一般可基于不同的数据结构实现,而最终执行效率往往相差很 大。 Figure 1‑2. 数据结构与算法的关系 如果将「LEGO 乐高」类比到「数据结构与算法」,那么可以得到下表所示的对应关系。 数据结构与算法 LEGO 乐高 输入数据0 码力 | 186 页 | 14.71 MB | 1 年前3
Hello 算法 1.0.0b2 Java版的字,一般我们会这样做: 1. 打开字典大致一半页数的位置,查看此页的首字母是什么(假设为 ? ); 2. 由于在英文字母表中 ? 在 ? 的后面,因此应排除字典前半部分,查找范围仅剩后半部分; 3. 循环执行步骤 1‑2 ,直到找到拼音首字母为 ? 的页码时终止。 1. 引言 hello‑algo.com 9 Figure 1‑1. 查字典步骤 查字典这个小学生的标配技能,实际上就是大名鼎鼎的「二 系列指令看作是「二分查找」算法。 小到烹饪一道菜、大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现,使我们可以通过编程将 数据结构存储在内存中,也可以编写代码来调用 CPU, GPU 执行算法,从而将生活中的问题搬运到计算机中, 更加高效地解决各式各样的复杂问题。 � 读到这里,如果你感到对数据结构、算法、数组、二分查找等此类概念一知半解,那么就太好 了!因为这正是本书存在的 储的数据,以及操作数据的对应方法。 ‧ 算法是数据结构发挥的舞台。数据结构仅存储数据信息,结合算法才可解决特定问题。 ‧ 算法有对应最优的数据结构。给定算法,一般可基于不同的数据结构实现,而最终执行效率往往相差很 大。 Figure 1‑2. 数据结构与算法的关系 如果将「LEGO 乐高」类比到「数据结构与算法」,那么可以得到下表所示的对应关系。 数据结构与算法 LEGO 乐高 输入数据0 码力 | 197 页 | 15.72 MB | 1 年前3
Hello 算法 1.0.0b4 Java版Figure 1‑3. 货币找零过程 小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使我们能够通过编程将 数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题转 移到计算机上,以更高效的方式解决各种复杂问题。 � 阅读至此,如果你对数据结构、算法、数组和二分查找等概念仍感到一知半解,那么太好了! 因为这正是本 于操作数据的方法。 ‧ 算法是数据结构发挥的舞台。数据结构本身仅存储数据信息,通过结合算法才能解决特定问题。 ‧ 特定算法通常有对应最优的数据结构。算法通常可以基于不同的数据结构进行实现,但最终执行效率 可能相差很大。 Figure 1‑4. 数据结构与算法的关系 我们可以把数据结构与算法类比为拼装积木。一套积木,除了包含许多零件之外,还附有详细的组装说明书。 我们按照说明书一步步操作,就能组装出精美的积木模型。 是在大数据量下的算法性能。 如果你对复杂度分析的概念仍感到困惑,无需担心,我们会在后续章节详细介绍。 2.1.3. 复杂度分析重要性 复杂度分析为我们提供了一把评估算法效率的“标尺”,告诉我们执行某个算法所需的时间和空间资源,并使 我们能够对比不同算法之间的效率。 复杂度是个数学概念,对于初学者可能比较抽象,学习难度相对较高。从这个角度看,复杂度分析可能不太 适合作为第一章的内容。然而0 码力 | 342 页 | 27.39 MB | 1 年前3
共 36 条
- 1
- 2
- 3
- 4













