当前位置: 首页 > 面试题库 >

用户(UserAccount)和领域的概念在Apache Shiro中如何关联?

邢炯
2023-03-14
问题内容

我正在阅读Apache Shiro,想看看我是否正确地建立了这种思维模型。

从文档:“A
Realm是一个组件,例如应用特定的罐访问的安全数据usersrolespermissions”。..“领域通常与数据源(例如关系数据库,LDAP目录,文件系统或其他类似资源)具有一对一的关联。”

此外,我已阅读到出于其身份验证和授权目的,一个application可能包含多个realms

很好,但是这Realms与用户的概念有什么关系?

  • 每个人都Realm应该是用户空间上的一个分区吗?即:一次User只能在1中发生Realm
  • 或者,这就是我所期望的,Realms可以用于在彼此之间进行身份验证和授权,并且 可以 在同一层上工作User。但是,在那种情况下,User托管在哪里?Realm我想它应该在外部,但是在哪里?

也许我对此感到困惑,因为我想将其User视为一个实体(例如:对我来说只有一个实体)。而应该将其User视为一个UserAccount。即:每个人都Realm管理自己的Useraccounts(在称为的文档中User),但是一个User可以有多个UserAcounts。那是对的吗?

假设以上是正确的:

  • 是否有任何逻辑可以使我查询所有UserAccounts给定用户?即:基本上合并Useraccounts在一起以获得完整的视图User
  • Shiro中是否存在User这种情况(1个User可能有多个UserAccounts)的概念?

问题答案:

您可以定义Realmsin
之间的关系authenticationStrategy。让我们来看一个例子。仅当用户针对所有领域通过身份验证时,才会对用户进行身份验证。您可以进行自己的authenticationStrategy实现,该实现只说一个成功的身份验证就足够了。

在示例中,我们结合了JDBC领域来存储用户名(没有密码),并根据LDAP对其进行身份验证。

可以说,您将添加另一个LDAP领域并创建authenticationStrategy,其中不需要针对领域的所有身份验证。但是,只需对LDAP成功进行一次身份验证就足够了。

shiro.ini

ds = org.apache.shiro.jndi.JndiObjectFactory
ds.requiredType = javax.sql.DataSource
ds.resourceName = java:comp/env/jdbc/xxx

noPassWordCredentialMatcher = eu.corp.domain.auth.NoPassMatcher

ldapRealm = eu.corp.domain.auth.CustomActiveDirectoryRealm
ldapRealm.searchBase = OU=USERS,OU=EN,DC=our,DC=corp
ldapRealm.url = ldap://our.corp:389
ldapRealm.principalSuffix = @our.corp

jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm
jdbcRealm.permissionsLookupEnabled = true
jdbcRealm.dataSource = $ds
jdbcRealm.credentialsMatcher = $noPassWordCredentialMatcher

jdbcRealm.authenticationQuery = SELECT name FROM auth WHERE name = ?
jdbcRealm.userRolesQuery = SELECT role.shortcut FROM auth LEFT JOIN auth_role ON auth_role.auth_id = auth.id LEFT JOIN role ON role.id = auth_role.role_id WHERE auth.name = ?
jdbcRealm.permissionsQuery = SELECT permission.shortcut FROM role JOIN role_permission ON role_permission.role_id = role.id JOIN permission ON permission.id = role_permission.permission_id WHERE role.shortcut = ?

cacheManager = org.apache.shiro.cache.ehcache.EhCacheManager
securityManager.cacheManager = $cacheManager

securityManager.realms = $ldapRealm, $jdbcRealm
authcStrategy = org.apache.shiro.authc.pam.AllSuccessfulStrategy
securityManager.authenticator.authenticationStrategy = $authcStrategy


 类似资料:
  • Kubernetes 和云原生应用在各个领域中的实践。

  • 本节介绍分析云账户权限系统相关的名词与概念,熟悉这些概念有助于您更好的进行后续的权限配置功能。 管理员账户 创建该站点的主账户 授权/受邀账户 通过授权系统,授权可访问该分析云站点的账户 权限站点 受邀账户接受的其他账户授权给自己的站点,对于受邀账户来说称之为“权限站点”,与之相对应的是由受邀账户自己创建的站点(此时受邀账户相对于自建站点的身份是管理员账户,而非受邀账户) 功能与功能权限 功能是指

  • 本文向大家介绍解释领导者和追随者的概念。相关面试题,主要包含被问及解释领导者和追随者的概念。时的应答技巧和注意事项,需要的朋友参考一下 答:在Kafka的每个分区中,都有一个服务器充当领导者,0到多个服务器充当追随者的角色。

  • 本节介绍分析云账户权限系统相关的名词与概念,熟悉这些概念有助于您更好的进行后续的权限配置功能。 管理员账户 创建该站点的主账户 授权/受邀账户 通过授权系统,授权可访问该分析云站点的账户 权限站点 受邀账户接受的其他账户授权给自己的站点,对于受邀账户来说称之为“权限站点”,与之相对应的是由受邀账户自己创建的站点(此时受邀账户相对于自建站点的身份是管理员账户,而非受邀账户) 功能与功能权限 功能是指

  • Hyperledger Composer是一种编程模型,包含建模语言和一组API,可快速定义和部署业务网络和应用程序,允许参与者发出交易来交换资产的。 Hyperledger Composer组件 你可以使用我们基于浏览器的界面(称为Hyperledger Composer Playground)体验Hyperledger Composer。Playground可作为托管版本(无需安装)或本地安装

  • 必备材料介绍 IntelliJ IDEA 对其他 IDE 转过来的用户有特别优待,对其专门整理了非常棒的资料,还请其他 IDE 过来的用户抽时间查看,会有很大帮助: Eclipse 用户可以看:https://www.jetbrains.com/idea/help/eclipse.html NetBeans 用户可以看:https://www.jetbrains.com/idea/help/net