JAAS DatabaseServerLoginModule rolesQuery 不返回用户角色

Posted

技术标签:

【中文标题】JAAS DatabaseServerLoginModule rolesQuery 不返回用户角色【英文标题】:JAAS DatabaseServerLoginModule rolesQuery does not return user roles 【发布时间】:2013-05-16 00:05:42 【问题描述】:

我使用 JAAS 和 JBoss 作为 7。使用的登录模块是 DatabaseServerLoginModule。这是我的配置:

<login-module code="Database" flag="required">
    <module-option name="dsJndiName" value="java:jboss/datasources/oracleDS"/>
    <module-option name="principalsQuery" value="SELECT PASSWD FROM FO.USERS WHERE USERNAME=?"/>
    <module-option name="rolesQuery" value="SELECT USERROLES, 'ROLES' FROM FO.USERROLES WHERE USERNAME=?"/>
</login-module>

身份验证成功进行,没有任何问题(登录模块能够恢复给定用户名的密码)。但我的问题是它无法使用rolesQuery 恢复角色,因此授权失败。例如,对于角色为dme 的用户krisv,如果我在eclipse 中的scrapbook 内执行rolesQuery,我会得到以下结果: 但是,当我想访问角色为dmeauth-constraint 的网页时,我得到以下信息:

【问题讨论】:

【参考方案1】:

'ROLES' 部分由 JBOSS 读取,它只理解驼峰式,它应该读取 'Roles' 告诉我这对你有什么影响

"SELECT USERROLES, 'Roles' FROM FO.USERROLES WHERE USERNAME=?"

【讨论】:

以上是关于JAAS DatabaseServerLoginModule rolesQuery 不返回用户角色的主要内容,如果未能解决你的问题,请参考以下文章

我们在哪里使用 JAAS

JAAS 概念

Apache Tomcat 1.7 如何将附加参数传递给 JAAS

如何基于JAAS(Authorization)实现多个Web应用的单点登录

JAAS + 来自数据库的身份验证

分析 JAAS 的示例程序