Apache Shiro参考手册中文版Authentication(身份验证) Authentication 是指身份验证的过程——即证明一个用户实际上是不是他们所说的他们是谁。对于一个用户证明自己 的身份来说,他们需要提供一些身份识别信息,以及某些你的系统能够理解和信任的身份证明。 这是通过提交用户的身份和凭证给 Shiro,以判断它们是否和应用程序预期的相匹配。 Principals(身份)是 Subject isAuthenticated()来定制你的视图和工作流都由 你来决定,但 Shiro 将维持这一基本情况以防你需要它。 注销 进行身份验证的反面是释放所有已知的的识别状态。当 Subject 完成了与应用程序的交互后,你可以调用 subject.logout()来释放所有的识别信息: currentUser.logout(); //removes all identifying information an invalidates 将会调用该 Realm 的 getAuthenticationInfo(token) 方法。这有效地代表了一个与 Realm 的后备数据源的授权尝试。该方法按以下方法进行: 1. 为主要的识别信息(帐户识别信息)检查 token。 2. 基于 principal 在数据源中寻找相吻合的帐户数据。 3. 确保 token 支持的 credentials 匹配那些存储在数据源的。 4. 若 credentials0 码力 | 92 页 | 1.16 MB | 1 年前3
Nacos架构&原理
系统打通,日志白平化,推送轨迹等能力,并且可以和计 量计费系统打通。 接入管理:相当于阿里云开通服务,分配身份、容量、权限过程。 用户管理:解决用户管理,登录,SSO 等问题。 权限管理:解决身份识别,访问控制,角色管理等问题。 Nacos 架构 < 20 审计系统:扩展接口方便与不同公司审计系统打通。 通知系统:核心数据变更,或者操作,方便通过 SMS 系统打通,通知到对应人数据变更。 端支持添加汇报心跳的逻辑,此时就可以使用动态服 务的注册方式。 Nacos 2.0 中继续沿用了持久化及非持久化的设定,但是有了⼀些调整。Nacos 1.0 中持久化及非 持久化的属性是作为实例的⼀个元数据进行存储和识别。这导致同⼀个服务下可以同时存在持久化 实例和非持久化实例。但是在实际使用中,我们发现这种模式会给运维人员带来极大的困惑和运维 复杂度;与此同时,从系统架构来看,⼀个服务同时存在持久化及非持久化实例的场景也是存在⼀ 命令,通常的方式是在代码里增加 MySQL 类型的健康检查方法、 构建、测试然后最终发布。但是如果允许用户上传⼀个 jar 包放到 Server 部署目录下的某个位置, Server 就会自动扫描并识别到这张新的健康检查方式呢?这样不仅更酷,也让整个扩展的流程与 Server 的代码解耦,变得非常简单。所以对于系统的⼀些功能,如果能够通过精心的设计开放给用 户在运行时去扩展,那么为什么不做呢?0 码力 | 326 页 | 12.83 MB | 9 月前3
Apache Shiro 1.2.x Reference Manual 中文翻译Management(会话管理), Cryptography(加密)被 Shiro 框架的开发团队称之为应用安全的四大基石。那么就让我们来 看看它们吧: Authentication(认证):用户身份识别,通常被称为用户“登录” Authorization(授权):访问控制。比如某个用户是否具有某个操作的使用权限。 Session Management(会话管理):特定于用户的会话管理,甚至在非web allowed to drive the 'eagle5' winnebago!"); } 轻而易举,是吧! 最后,当用记不再使用系统,可以退出登录: currentUser.logout(); //清楚识别信息,设置 session 失效. Final Tutorial class 最终的 class 在加入上述代码后,下面的就是我们完整的文件,你可以自由编辑和运行它,可以尝试改变 安全检测(以及INI配置): (AuthenticationException ae) { //无定义?错误? } } //说出他们是谁: //打印主要识别信息 (本例是 username): log.info("User [" + currentUser.getPrincipal() + "] logged in successfully0 码力 | 196 页 | 2.34 MB | 1 年前3
跟我学Shiro - 张开涛SimpleAuthenticationInfo , 通 过 SimpleAuthenticationInfo 的 credentialsSalt 设置盐,HashedCredentialsMatcher 会自动识别这 个盐。 如果使用 JdbcRealm,需要修改获取用户信息(包括盐)的 sql: “select password, password_salt from users where username Shiro 的会话管理可以直接替换如 Web 容器的会话管理。 会话 所谓会话,即用户访问应用时保持的连接关系,在多次交互中应用能够识别出当前访问的 用户是谁,且可以在多次交互中保存一些数据。如访问一些网站时登录成功后,网站可以 记住用户,且在退出之前都可以识别当前用户是谁。 Shiro 的会话支持不仅可以在普通的 JavaSE 应用中使用,也可以在 JavaEE 应用中使用,如 web 简单,通过一些 OCR 工具就可以解析出来;另外还有一些验证码比较复杂(一般通过如扭 曲、加线条/噪点等干扰)防止 OCR 工具识别;但是在中国就是人多,机器干不了的可以 交给人来完成,所以在中国就有很多打码平台,人工识别验证码;因此即使比较复杂的如 填字、算数等类型的验证码还是能识别的。所以验证码也不是绝对可靠的,目前比较可靠 还是手机验证码,但是对于用户来说相对于验证码还是比较麻烦的。 对于验证码图片的生成,可以自己通过如0 码力 | 219 页 | 4.16 MB | 10 月前3
Java 应用与开发 - HTTP 会话跟踪技术Java EE 会话对象 会话对象的功能和方法 O public String getId() 取得会话对象的 ID,是唯一性的字符串代码。 由于 HTTP 协议的无状态性,为了使用 Web 容器能识别不同客 户而确定各自的会话对象,Web 容器需要将会话 ID 保存到客户 端。当客户进行 HTTP 请求时,需要发送此 ID 给服务器,Web 服务器根据此 ID 定位服务器内部的会话对象,实现指定客户的0 码力 | 54 页 | 824.47 KB | 1 年前3
Hello 算法 1.0.0b4 Java版。 Figure 13‑7. 重复排列 那么如何去除重复的排列呢?最直接地,考虑借助一个哈希表,直接对排列结果进行去重。然而这样做不够优 雅,因为生成重复排列的搜索分支是没有必要的,应当被提前识别并剪枝,这样可以进一步提升算法效率。 13. 回溯 hello‑algo.com 256 相等元素剪枝 观察发现,在第一轮中,选择 1 或选择 ̂1 是等价的,在这两个选择之下生成的所有排列都是重复的。因此应 当目标金额为 0 时,凑出它的最少硬币个数为 0 ,即首列所有 ??[?, 0] 都等于 0 。 当无硬币时,无法凑出任意 > 0 的目标金额,即是无效解。为使状态转移方程中的 min() 函数能够识别并 过滤无效解,我们考虑使用 +∞ 来表示它们,即令首行所有 ??[0, ?] 都等于 +∞ 。 代码实现 大多数编程语言并未提供 +∞ 变量,只能使用整型 int 的最大值来代替。而这又会导致大数越界:状态转0 码力 | 342 页 | 27.39 MB | 1 年前3
Hello 算法 1.1.0 Java版hello‑algo.com 285 图 13‑7 重复排列 那么如何去除重复的排列呢?最直接地,考虑借助一个哈希表,直接对排列结果进行去重。然而这样做不够 优雅,因为生成重复排列的搜索分支没有必要,应当提前识别并剪枝,这样可以进一步提升算法效率。 1. 相等元素剪枝 观察图 13‑8 ,在第一轮中,选择 1 或选择 ̂1 是等价的,在这两个选择之下生成的所有排列都是重复的。因此 应该把 ̂1 剪枝。 当目标金额为 0 时,凑出它的最少硬币数量为 0 ,即首列所有 ??[?, 0] 都等于 0 。 当无硬币时,无法凑出任意 > 0 的目标金额,即是无效解。为使状态转移方程中的 min() 函数能够识别并 过滤无效解,我们考虑使用 +∞ 来表示它们,即令首行所有 ??[0, ?] 都等于 +∞ 。 第 14 章 动态规划 hello‑algo.com 331 2. 代码实现 大多数编程语言并未提供0 码力 | 378 页 | 18.47 MB | 1 年前3
Hello 算法 1.0.0b5 Java版回溯 hello‑algo.com 287 那么如何去除重复的排列呢?最直接地,考虑借助一个哈希表,直接对排列结果进行去重。然而这样做不够优 雅,因为生成重复排列的搜索分支是没有必要的,应当被提前识别并剪枝,这样可以进一步提升算法效率。 1. 相等元素剪枝 观察图 13‑8 ,在第一轮中,选择 1 或选择 ̂1 是等价的,在这两个选择之下生成的所有排列都是重复的。因此 应该把 ̂1 剪枝掉。 当目标金额为 0 时,凑出它的最少硬币个数为 0 ,即首列所有 ??[?, 0] 都等于 0 。 当无硬币时,无法凑出任意 > 0 的目标金额,即是无效解。为使状态转移方程中的 min() 函数能够识别并 过滤无效解,我们考虑使用 +∞ 来表示它们,即令首行所有 ??[0, ?] 都等于 +∞ 。 第 14 章 动态规划 hello‑algo.com 335 2. 代码实现 大多数编程语言并未提供0 码力 | 376 页 | 30.69 MB | 1 年前3
Hello 算法 1.0.0 Java版所示,上述方法生成的排列有一半是重复的。 图 13‑7 重复排列 那么如何去除重复的排列呢?最直接地,考虑借助一个哈希表,直接对排列结果进行去重。然而这样做不够 优雅,因为生成重复排列的搜索分支没有必要,应当提前识别并剪枝,这样可以进一步提升算法效率。 1. 相等元素剪枝 观察图 13‑8 ,在第一轮中,选择 1 或选择 ̂1 是等价的,在这两个选择之下生成的所有排列都是重复的。因此 应该把 ̂1 剪枝。 当目标金额为 0 时,凑出它的最少硬币数量为 0 ,即首列所有 ??[?, 0] 都等于 0 。 当无硬币时,无法凑出任意 > 0 的目标金额,即是无效解。为使状态转移方程中的 min() 函数能够识别并 过滤无效解,我们考虑使用 +∞ 来表示它们,即令首行所有 ??[0, ?] 都等于 +∞ 。 第 14 章 动态规划 hello‑algo.com 332 2. 代码实现 大多数编程语言并未提供0 码力 | 376 页 | 17.59 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Java 版hello‑algo.com 285 图 13‑7 重复排列 那么如何去除重复的排列呢?最直接地,考虑借助一个哈希集合,直接对排列结果进行去重。然而这样做不 够优雅,因为生成重复排列的搜索分支没有必要,应当提前识别并剪枝,这样可以进一步提升算法效率。 1. 相等元素剪枝 观察图 13‑8 ,在第一轮中,选择 1 或选择 ̂1 是等价的,在这两个选择之下生成的所有排列都是重复的。因此 应该把 ̂1 剪枝。 当目标金额为 0 时,凑出它的最少硬币数量为 0 ,即首列所有 ??[?, 0] 都等于 0 。 当无硬币时,无法凑出任意 > 0 的目标金额,即是无效解。为使状态转移方程中的 min() 函数能够识别并 过滤无效解,我们考虑使用 +∞ 来表示它们,即令首行所有 ??[0, ?] 都等于 +∞ 。 第 14 章 动态规划 www.hello‑algo.com 332 2. 代码实现 大多数编程语言并未提供0 码力 | 379 页 | 18.48 MB | 10 月前3
共 11 条
- 1
- 2













