Java – 高效、数据库感知的实例级授权?

2024-01-28

在 JPA 应用程序中,我有一个场景,其中该应用程序是

列出给定用户有权提款的所有帐户

我有帐户实体和一个多对多表,其中列出了每个用户对每个帐户拥有的授权 - 为了实现上述场景,应用程序当前只是内部联接两个表 - 这非常快。

现在,我计划添加一个显式授权层(基于 apache shiro / spring security / 其他)以将授权相关逻辑与其余代码隔离,但是......

数据库中有大约 10k 个帐户,“普通”用户被授予对所有帐户“存款”、对其中一半帐户“查看”以及对少数帐户“提款”的权限。

是否有任何安全框架可以有效地实现这种情况?

即:他们中的任何一个都能够“装饰”“从帐户 a 中选择一个”类​​型的 JPA 查询(或等效的 SQL),从而获取帐户列表无需从数据库加载所有用户授权,并且无论如何,无需检索所有帐户?)


看一下阿帕奇·希罗 http://shiro.apache.org/.

它允许您提取一次用户授权并在会话期间缓存它。此外,如果所有用户都可以查看所有帐户,那么您就不需要显式定义这一点,这将显着减少开销。

如果您的解决方案需要实时访问处理程序,Shiro 也可以在运行时动态重置权限。

Shiro 允许您实现典型的 RBAC 并定义如下权限:

domain:action:instance

因此,在您的情况下,用户的权限可能如下所示:

account:deposit:*  // deposit all accounts
account:view:1111
account:view:2222
account:view:3333 // view on these accounts
account:withdraw:5555
account:withdraw:6666  // withdraw on these accounts

在代码中你可以做这样的事情:

if (SecurityUtils.getSubject().isPermitted("account:withdraw:"+account.getAccountNumber() ) {
  // handle withdraw
}

Shiro 还具有用于额外抽象的注释驱动权限。

EDIT

Shiro 权限是最终结果,而不是起点。我使用了一组表来表示用户到角色和角色到权限的映射以及到实例的其他映射。在 AuthN 之后,它通常是一组由用户 PK 索引的简单查询,以构建呈现权限所需的数据结构。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java – 高效、数据库感知的实例级授权? 的相关文章

  • Kafka - 如何同时使用过滤器和过滤器?

    我有一个 Kafka 流 它从一个主题获取数据 并且需要将该信息过滤到两个不同的主题 KStream
  • 以相反的顺序打印任何集合中的项目?

    我在 使用 Java 进行数据结构和问题解决 一书中遇到以下问题 编写一个例程 使用 Collections API 以相反的顺序打印任何 Collection 中的项目 不要使用 ListIterator 我不会把它放在这里 因为我想让有
  • 有人用过 ServiceLoader 和 Guice 一起使用吗?

    我一直想通过我们的应用程序 构建系统进行更大规模的尝试 但更高的优先级不断将其推到次要地位 这似乎是加载 Guice 模块的好方法 并且避免了关于 硬编码配置 的常见抱怨 单个配置属性很少会自行更改 但您几乎总是会有一组配置文件 通常用于不
  • AllowAnonymous 与 OverrideAuthorizeAttribute

    AllowAnonymous 和 OverrideAuthorizeAttribute 的使用有什么区别 是一样的吗 http www asp net web api overview security authentication and
  • Java AES 256 加密

    我有下面的 java 代码来加密使用 64 个字符密钥的字符串 我的问题是这会是 AES 256 加密吗 String keyString C0BAE23DF8B51807B3E17D21925FADF273A70181E1D81B8EDE
  • 2^31 次方的 Java 指数错误 [重复]

    这个问题在这里已经有答案了 我正在编写一个java程序来输出2的指数幂 顺便说一句 我不能使用Math pow 但是在 2 31 和 2 32 处我得到了其他东西 另外 我不打算接受负整数 My code class PrintPowers
  • 如何更改 Swagger-ui URL 前缀?

    我正在使用 Springfox Swagger2 和 Spring boot 1 5 9 我可以通过此链接访问 swagger UI http localhost 8090 swagger ui html http localhost 80
  • 为什么解析这个 JSON 会抛出错误?

    我正在尝试解析这个 JSONObject query yahoo count 1 results rate Name USD INR id USDINR Time 12 19pm Date 10 31 2015 Bid 65 405 Ask
  • 无法验证 Spring Security 中 url 模式的角色

    我正在使用 spring security 3 1 7 RELEASE 和 spring 3 2 13 RELEASE 我的 spring security xml 中有如下条目
  • 数据库中的持久日期不等于检索日期

    我有一个具有 Date 属性的简单实体类 此属性对应于 MySQL 日期时间列 Entity public class Entity Column name start date Temporal TemporalType TIMESTAM
  • Joshua Bloch 的构建器设计模式有何改进?

    早在 2007 年 我就读过一篇关于 Joshua Blochs 所采用的 构建器模式 的文章 以及如何修改它以改善构造函数和 setter 的过度使用 特别是当对象具有大量属性 其中大部分属性是可选的 时 本文对此设计模式进行了简要总结
  • 如何向页面添加 HTML 页眉和页脚?

    如何使用 itext 从 html 源添加标题到 pdf 目前 我们已经扩展了 PdfPageEventHelper 并重写了这些方法 工作正常 但当我到达 2 个以上页面时 它会抛出 RuntimeWorkerException Over
  • Tomcat 6 未从 WEB-INF/lib 加载 jar

    我正在尝试找出我的 tomcat 环境中的配置问题 我们的生产服务器正在运行 tomcat 安装并从共享 NFS 挂载读取战争 然而 当我尝试使用独立的盒子 及其配置 进行同样的战争时 我收到下面发布的错误 有趣的是 如果我将 WEB IN
  • 即使禁用安全性,OAuth 令牌 API 也无法在 Elastic Search 中工作

    我是 Elastic search 新手 使用 Elastic search 版本 7 7 1 我想通过以下方式生成 OAuth 令牌弹性搜索文档 https www elastic co guide en elasticsearch re
  • 我所有的 java 应用程序现在都会抛出 java.awt.headlessException

    所以几天前我有几个工作Java应用程序使用Swing图书馆 JFrame尤其 他们都工作得很好 现在他们都抛出了这个异常 java awt headlessexception 我不知道是什么改变了也许我的Java版本不小心更新了 谢谢你尽你
  • Spring Data Rest 多对多 POST

    首先 让我解释一下我的用例 这非常简单 有一个用户实体和一个服务实体 我使用 UserService 作为连接实体 连接表 在用户和服务之间建立多对多关联最初 会有一些用户集和一些服务集 用户可以在任何时间点订阅任何服务 在这种情况下 将向
  • Java 的“&&”与“&”运算符

    我使用的示例来自 Java Herbert Schildt 的完整参考文献 第 12 版 Java 是 14 他给出了以下 2 个示例 如果阻止 第一个是好的 第二个是错误的 因此发表评论 public class PatternMatch
  • Spring 作为 JNDI 提供者?

    我想使用 Spring 作为 JNDI 提供程序 这意味着我想在 Spring 上下文中配置一个 bean 可以通过 JNDI 访问该 bean 这看起来像这样
  • 设置 TreeSet 的大小

    有没有办法像数组一样对 Java 集合中的 TreeSet 进行大小限制 例如我们在数组中 anArray new int 10 数组具有固定长度 在创建数组时必须指定该长度 A TreeSet当您向其中添加元素时会自动增长 您无法设置其大
  • 关闭扫描仪是否会影响性能

    我正在解决一个竞争问题 在问题中 我正在使用扫描仪获取用户输入 这是 2 个代码段 一个关闭扫描器 一个不关闭扫描器 关闭扫描仪 import java util Scanner public class JImSelection publ

随机推荐

  • Github 上的 Mocha 并行作业 Actions

    我刚刚切换到 Mocha 中的并行测试 效果很好 但是 当我在 github 上运行它时 它似乎没有并行运行 为了让 Mocha 在 Github Actions 上并行运行 我需要配置什么 mocharc json Mocha 9 x t
  • 下拉列表到组合框

    我正在寻找一个简单的控件或 jQuery 插件 将 DropDownList 转换为 ComboBox 我目前正在使用 Ajax Combo Box 我已经受够了 我试图使组合框的宽度为 100 但当从列表中选择一个项目时 组合框的大小调整
  • Android 上可以处理不规则形状上的事件吗?

    据我目前所知 了解很少 Android 中的所有视图都是正方形或矩形 这几乎一直都很好 直到您想要 我真正想要的 创建可以处理事件的非方形形状 我的目标是将一个圆分为 3 个部分 每个部分 120 圆圈的每个部分都应该像一个按钮 问题是 如
  • Django 测试不会引发 CharField 的完整性错误

    如果有以下 Django 1 4 模型 from django db import models class SimpleModel models Model name models CharField max length 100 这个简
  • Rails - 表单字段之间出现换行符并出现错误

    我在尝试消除 Rails 似乎在有错误的字段之间插入的额外换行符时遇到了麻烦 我创建了一个新的 Rails 应用程序 创建了一个名为 用户 的脚手架 其中包含姓名和年龄 然后说validates name presence gt true
  • 如何创建一个包含字符串和对象哈希表条目的 JList?

    我想创建一个 JList 其中包含 String 和 object 的哈希表的条目 Hashtable
  • 通过正则表达式查找括号

    我不太擅长正则表达式 我正在查找字符串是否包含 注意 我并不是在寻找实际的 中的内容 只是看字符串中是否包含 或 我知道如果我执行 scan 它将获取任何匹配项并创建一个数组 我想要的 我只是不知道表达方式 使用非贪婪匹配的替代方案 没有那
  • 从 .NET 数据库中检索数据的最快方法?

    Using ADO NET http en wikipedia org wiki ADO NET 从数据库检索数据并将数据填充到我的业务对象中的最快方法是什么 我应该使用哪一个 DBDataReader DBDataAdapter 或任何其
  • segue:目标视图控制器的怪异

    在我的应用程序中 我使用故事板和转场 并且经常在执行转场之前将数据传递到目标视图控制器 如下所示 void prepareForSegue UIStoryboardSegue segue sender id sender if segue
  • 如何检查一种类型是否具有另一种类型的所有键但没有附加键?

    我想检查一种类型是否具有另一种类型的所有键 但没有其他键 例如它是一个子集 基本上 我需要一些像下面这样的函数 如果 TTo 不是子集 它会给我打字稿错误 function typeCheck
  • imagerotate() 不起作用

    我的 imagerotate PHP 函数有问题 我运行下面的脚本 它成功地使用 imagejpeg 创建了新图像 但新图像与原始图像相同 因此它不会旋转它 它在 Apache error log 中没有显示错误消息 所以我不知道 file
  • mysql用触发器设置最大行数

    我想创建一个最多包含 5 行的表 因此 如果我添加新行并且表已经有 5 行 则触发器应删除第一行并添加新行 e g my table id data 1 a 2 b 3 c 4 d 改成 my table id data 2 b 3 c 4
  • 是否可以创建一个通用的 Session.QueryOver

    出于好奇 是否可以使用 NHibernate 3 执行类似的操作 public IQueryable
  • 为什么我的程序会改变布尔值? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我正在编写一个简单的程序 用于检查输入单词是否可以用输入字母拼写 无论我输入什么 布尔值总是会更改为 true 即使 if 语句中
  • Symfony:Doctrine 数据装置:如何处理大型 csv 文件?

    我正在尝试使用学说数据固定装置从 大 CSV 文件 3Mo 37000 行 7 列 插入 在 mySQL 数据库中 数据 过程非常缓慢 此时我无法成功 可能我还得再等一会儿 我想学说数据装置并不是为了管理如此大量的数据 也许解决方案应该是将
  • 有免费的 XNA UI 库吗?

    我正在考虑游戏中的游戏用户界面 查看 XNAML http msmvps com blogs valentin pages xnaml component aspx http msmvps com blogs valentin pages
  • 类成员的继承,与模板混合

    在下面的代码中 为什么T2给出这个错误 m t was not declared in this scope 而结核病还好吗 我如何在仍然使用模板的情况下访问 T2 中的 T1 成员 All good class TA public TA
  • 如何为某种特定类型而不是全局设置 Json.NET ContractSerializer?

    我想仅为 ASP NET Web API 应用程序中的某些类型设置合同序列化程序 我可以在 App Start FormatterConfig cs 中全局设置设置 如下所示 public static void RegisterGloba
  • 简洁和匿名类型

    是否可以在 Dapper 中使用匿名类型 我可以看到如何使用动态即 connection Query
  • Java – 高效、数据库感知的实例级授权?

    在 JPA 应用程序中 我有一个场景 其中该应用程序是 列出给定用户有权提款的所有帐户 我有帐户实体和一个多对多表 其中列出了每个用户对每个帐户拥有的授权 为了实现上述场景 应用程序当前只是内部联接两个表 这非常快 现在 我计划添加一个显式