Java 如何在Servlet中获取用户角色?

Java 如何在Servlet中获取用户角色?,java,authentication,jboss,Java,Authentication,Jboss,我使用Jbos AS 5和DatabaseServerLoginModule进行授权。我将我的应用程序策略定义为(例如,仅限于实际代码): 客人 java:/MyDatabases 从JMS_用户中选择PASSWD,其中USERID=? 从USERID=? 一旦用户被成功授权,我如何从servlet中检索用户角色?在上面的代码片段中,角色是从数据库中选择的,但是它们存储在哪里?正在开会!?如果是,在哪个会话变量下 另外,是否可以在JBoss中结合使用Ldap身份验证和数据库授权?我知道这种方

我使用Jbos AS 5和DatabaseServerLoginModule进行授权。我将我的应用程序策略定义为(例如,仅限于实际代码):


客人
java:/MyDatabases
从JMS_用户中选择PASSWD,其中USERID=?
从USERID=?
一旦用户被成功授权,我如何从servlet中检索用户角色?在上面的代码片段中,角色是从数据库中选择的,但是它们存储在哪里?正在开会!?如果是,在哪个会话变量下


另外,是否可以在JBoss中结合使用Ldap身份验证和数据库授权?

我知道这种方法:

boolean HttpServletRequest.isUserInRole(String role)

我知道这并没有给你一份所有角色的清单,但它能满足你的目的吗?

克林顿基本上是对的,这个

boolean HttpServletRequest.isUserInRole(String role)
方法可用于检查用户是否分配了特定角色然而,此方法旨在检查应用程序(在EAR的描述符application.xml中)定义的J2EE角色


在部署期间,或者通过在EAR文件中打包为特定描述符,您需要指定应用程序服务器的用户角色(您在登录模块中设置为主体)到J2EE应用程序的映射。角色

如果容器与JACC兼容,那么下面的代码段可能会起作用(至少对我来说是Glassfish 3.1.x)

第一个目标(通常)是您的用户主体,其他目标往往是组主体。请注意,如果您碰巧知道组主体的类名,您可以通过调用
getPrincipals(class c)
对其进行过滤

boolean HttpServletRequest.isUserInRole(String role)
Subject subject = (Subject) PolicyContext.getContext("javax.security.auth.Subject.container");
for (Principal principal : subject.getPrincipals()) {
    LOG.debug("In subject: " + principal.getName());
}