在 jboss 中将带有 JAAS 登录模块的数据源部署为 .sar

Posted

技术标签:

【中文标题】在 jboss 中将带有 JAAS 登录模块的数据源部署为 .sar【英文标题】:Deploying a datasource w/ JAAS login module as a .sar in jboss 【发布时间】:2010-09-24 05:39:11 【问题描述】:

有没有人有将数据源 (-ds.xml) 定义 + login-config.xml 捆绑为 jboss 中的服务存档的经验?我一直在为此奋斗一段时间,但无济于事。我只是在寻找一些关于我应该如何布置 .sar 的指示。我希望 .sar 最终存在于 .ear 中。任何指针都非常感谢!

【问题讨论】:

【参考方案1】:

这是一个相对简单的任务。

您的 EAR 文件需要具有以下布局:

my-app.ear
    |+ META-INF
       |+ applications.xml and jboss-app.xml
    |+ myapp.war
    |+ myapp.jar
    |+ lib
    |+ my-ds.xml
    |+ my-login-module-service.xml

其中 my-ds.xml 像往常一样包含数据源定义。 my-login-module-service.xml 基于 DynamicLoginConfig 类定义 MBean。然后在 jboss-app.xml(自定义 JBoss 部署描述符)中引用这些模块,如下所示:

<jboss-app>
<module>
    <service>my-login-module-service.xml</service>
</module>

<module>
    <service>my-ds.xml</service>
</module>
</jboss-app>

创建登录模块定义的最简单方法是使用对嵌入式 XML 文档的支持作为属性值。这样的配置(my-login-module-service.xml)将如下所示:

<server>
    <mbean code="org.jboss.security.auth.login.DynamicLoginConfig"
        name="jboss:service=DynamicLoginConfig">
        <attribute name="PolicyConfig" serialDataType="jbxb">
        <jaas:policy xsi:schemaLocation="urn:jboss:security-config:4.1 resource:security-config_4_1.xsd" xmlns:jaas="urn:jboss:security-config:4.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <jaas:application-policy name="userinrole">
            <jaas:authentication>
                <jaas:login-module code="org.jboss.security.auth.spi.XMLLoginModule" flag="required">
                <jaas:module-option name="my-policy-123">
                <ur:users xsi:schemaLocation="urn:jboss:user-roles:1.0 resource:user-roles_1_0.xsd" xmlns:ur="urn:jboss:user-roles:1.0">
                    <ur:user name="admin" password="admin123">
                        <ur:role name="MyUserRole"></ur:role>
                        <ur:role name="AdminUser"></ur:role
                    </ur:user>
                </ur:users>
                </jaas:module-option>
                <jaas:module-option name="unauthenticatedIdentity">guest</jaas:module-option>
                </jaas:login-module>
        </jaas:authentication>
        </jaas:application-policy>
        </jaas:policy>
    </attribute>
        <depends optional-attribute-name="LoginConfigService">jboss.security:service=XMLLoginConfig</depends>
        <depends optional-attribute-name="SecurityManagerService">jboss.security:service=JaasSecurityManager</depends>
    </mbean>
</server>

您可以使用 JNDIVIew bean 验证成功部署(本示例中为 java:/jaas/my-policy-123)。

对于包含自定义类的部署,最好选择 SAR 存档部署和自定义代码。在这种情况下,您可以将 MBean 定义和登录模块配置(META-INF/jboss-service.xml)分开:

<server>
<mbean code="org.jboss.security.auth.login.DynamicLoginConfig" name="jboss:service=DynamicLoginConfig">
    <attribute name="AuthConfig">META-INF/login-config.xml</attribute>
    <depends optional-attribute-name="LoginConfigService">jboss.security:service=XMLLoginConfig</depends>
    <depends optional-attribute-name="SecurityManagerService">jboss.security:service=JaasSecurityManager</depends>
</mbean>
</server>

META-INF/login-config.xml 然后将包含您的策略配置。

我在 JBoss AS 4.x 上使用这种方法。

【讨论】:

以上是关于在 jboss 中将带有 JAAS 登录模块的数据源部署为 .sar的主要内容,如果未能解决你的问题,请参考以下文章

JAAS DatabaseServerLoginModule rolesQuery 不返回用户角色

带有证书和 LDAP 登录模块的 JBoss 密码堆栈

JAAS 注销不适用于自定义登录模块

JBOSS 自定义登录模块

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

具有数据库授权的 Spring JAAS 身份验证