我在JBOSS上运行了一个非常普通的Java EE应用程序。 它使用JBoss DatabaseLoginModule JAAS身份验证。 它还在Hibernate中具有完全相同的应用层用户/角色。
我有一个想法(我认为这对我来说非常有用),我可以在软件许可对象(不使用hibernate)中设置一个能力位,使所有用户成为只读用户。这使我可以通过重新许可来制作产品的只读版本。
我想要做的是根据程序中可访问的布尔标记重新映射用户关联。
通常我们得到(很多次加入)
用户 - * UserRole * -Role - * RoleActions
,其中
user.roleid => role.id
设置布尔值(软件许可证中设置的功能位)
我希望JAAS的行为像许可证所说的那样,所有用户都是roleid = 1。
有什么想法吗?
答案 0 :(得分:1)
通过继承DatabaseServerLoginModule,我可以执行额外的检查。 (在软件许可证上)
我可以随便
如果许可证已过期,请提供A Readonly用户(凭据已修复)
如果许可证设置了只读功能位,请给予只读用户(凭据已修复)
由于已经拦截了登录,因此Hibernate User查找将适用于正确的用户。
答案 1 :(得分:0)
也许我在这里错过了这条船,但为什么不以编程方式做到这一点呢?
在User
对象中,提供一个像getAuthenticatedRoles()
这样的瞬态getter,它会额外过滤Hibernate
加载的内容。另外,创建原始映射集合getter protected
,并仅使用其他Java代码中的getAuthenticatedRoles()
。