我使用Jbos AS 5和DatabaseServerLoginModule进行授权。我将我的应用程序策略定义为(例如,仅限于示例,而不是实际代码):
<application-policy name = "jbossmq">
<authentication>
<login-module code = "org.jboss.security.auth.spi.DatabaseServerLoginModule"
flag = "required">
<module-option name = "unauthenticatedIdentity">guest</module-option>
<module-option name = "dsJndiName">java:/MyDatabaseDS</module-option>
<module-option name = "principalsQuery">SELECT PASSWD FROM JMS_USERS WHERE USERID=?</module-option>
<module-option name = "rolesQuery">SELECT ROLEID, 'Roles' FROM JMS_ROLES WHERE USERID=?</module-option>
</login-module>
</authentication>
</application-policy>成功授权用户后,如何从servlet中检索用户角色?在上面的代码片段中,角色是从数据库中选择的,但是它们存储在哪里呢?在会话中!?如果是,在哪个会话变量下?
另外,是否可以在JBoss中同时使用Ldap身份验证和数据库授权?
发布于 2009-05-07 13:12:13
克林顿基本上是对的,
boolean HttpServletRequest.isUserInRole(String role)方法可以用来检查用户是否分配了特定的角色。但是对于,此方法用于检查由应用程序定义的J2EE角色(在EAR的描述符中,application.xml)。
在部署期间,或者通过在EAR文件中打包特定于AS的描述符,您需要指定应用程序服务器的用户角色(您在登录模块中设置的用户角色)到J2EE应用程序的映射。角色。
发布于 2009-05-07 13:03:41
我知道这种方法:
boolean HttpServletRequest.isUserInRole(String role)我知道这不会给你一个所有角色的列表,但它能满足你的目的吗?
发布于 2014-04-14 22:15:42
如果容器是JACC兼容的,下面的代码片段可能会工作(至少对于我在Glassfish 3.1.x上是这样)
Subject subject = (Subject) PolicyContext.getContext("javax.security.auth.Subject.container");
for (Principal principal : subject.getPrincipals()) {
LOG.debug("In subject: " + principal.getName());
}第一个目标(通常)是你的用户主体,其他的往往是组主体。请注意,如果您碰巧知道组主体的类名,您可以通过调用getPrincipals(Class<T> c)来过滤它。
https://stackoverflow.com/questions/834388
复制相似问题