java - 如何将 Java 安全层(Apache Shiro|Spring Security)集成到 webapp 菜单系统

标签 java spring-mvc menu spring-security shiro

正如标题所说,我需要创建一个动态menu stored作为 database 中的一棵树并且计划在其上放置一个接口(interface)。现在我需要决定如何实现 Access Control Layer基于市场上适合此要求的产品。

我大量使用Spring IoC , spring mvc等等....与hibernate对于我的项目。我用过apache shiro以前,这还不错。只是社区还很年轻,所以关于 shiro 的问题需要时间才能做出贡献,而且没有广泛的文档。

我仍然计划使用 shiro无论如何,因为我有过 spring security 没有的经验现在第一个问题应该是将 ACL 与菜单系统|导航系统联系起来是个好主意。如果有人可以分享他在这方面的经验,我将很高兴。

所以我脑海中浮现出这个模型 users , roles , rights , users_rights , roles_users , roles_rights

users //contains creds and user detail
roles //contains roles
rights // contains rights (including menu entries matching rights, if i have to tie them)
roles_users //many-to-many roles-users with extra columns mapped as entity
roles_rights // many-to-many roles-rights with extra columns mapped as entity

users_rights //many-to-many users-rights mapped as entity with extra columns. special rights for user and overwrite the overall rights given by roles. can deny rights given by a role or add rights not inside any roles 

所以在权利表中我可以这样:

  id
  name // in the form of admin:users:list
  description
  menu_name // unique name what shows on page
  menu_url 

唯一的问题是我如何处理子菜单? self 多对多权利? 最后一切都变得如此复杂。所以我想要有其他的观点、见解、建议。谢谢

最佳答案

我希望我明白你想要什么。
我认为使用自外键是有效的。
但是,我建议您在创建子菜单时或在更新其中一个父菜单时计算子菜单的“ACL 值”,
因此,在子菜单的 ACL 检查期间,您无需花费时间进行计算。
如果我没有正确使用这些术语,我很抱歉,
一般来说,我的意思是,如果您在一棵树上有一些值,并且该值可能取决于树中父节点的值,
您应该考虑在插入、更新或祖先之一的任何更改期间计算子节点/叶子的值。

关于java - 如何将 Java 安全层(Apache Shiro|Spring Security)集成到 webapp 菜单系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12439170/

相关文章:

java - 模块化/可插入的 Java Web 应用程序

java - 未使用自定义 HTTP 消息转换器,415 媒体类型不受支持

html - 多级 CSS3 下拉菜单

CSS 子菜单与其父级一样宽

javascript - 在其任何子页面上突出显示标题菜单项

java - 如果管理层决定开源项目可以满足业务需求。您(Java开发人员)会学习PHP吗?

java - 有没有办法在 Maven 中执行一个程序来帮助构建你的项目?

java - 构建AWS Lambda jar

java - 如何使用 JSTL 迭代字符串映射中的列表和对象列表?

java - Spring Boot webflux 仅返回 401 和 403