J2EE中如何实现动态分配角色

最近用 JBOSS4.0 试用一下 EJB3.0,感觉比EJB2.0 要轻松许多,之前在EJB2.0 中的体力活在 EJB3.0 中都免了,而且安全角色的运用也简单了。但有一点一直让我郁闷的是,不知道如何实现动态分配角色,我把用户角色信息存储在数据库中,每当我改动角色时,都要重新启动 JBOSS 时才能生效。不知哪位老兄有解决之道,小弟感激涕零!

J2EE容器是将角色和权限定死的,如果有动态角色要求,可能你设计有问题了。

您可能误会我的意思了。我是指角色和权限已经固定下来.我需用运行时给某个用户授予某个角色,希望可以马上生效,而不需要重启JBOSS.

>希望可以马上生效
这是服务器缓存作用,你将其失效,他重新登陆即可,无需重新启动JBoss,我就是这么做的。

对了,我是修改其密码让其重新登陆的,不一定适合你。你可以设置JBoss的安全缓存,失效即可。

> J2EE容器是将角色和权限定死的,如果有动态角色要求,可能你设计有> 问题了。
难道不让人新建角色了?
我觉得这种东西就不应该用容器提供的安全机制,太不灵活了。
J2EE在安全性这一块真的没有实现自己的承诺!

可能你误解了,这里解决思路和我们平常思维有些不一样,新建角色等同于一个单位新增岗位,不是经常发生,一旦发生,也可以在运行时配置XML可立即起作用。

我如何在程序中使 JBOSS 的安全缓存失效,能否单独使某个用户的安全缓存失效,而不影响其它用户。

这个我曾经试验过,甚至我替代过其loginModule,也许因为JBoss 3.0的不透明性,无法成功。所以这个问题也一直伤我脑筋啊。

还有其它办法吗?分配一次角色就得重起一次很麻烦啊!也不现实啊。

我想服务内部的实现是使用了静态单例 在服务器启动的时候一次性加载 角色配置文件 所以当你改变的时候 内存的配置始终不会改变了直到你重新启动服务器。 如果你想实现自己的动态访问控制 只有自己实现一套RBAC机制。

把 deploy 目录下的 security-service.xml 中的DefaultCacheTimeout和DefaultCacheResolution中的值均设置为0,重启JBOSS就可以了