Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JBoss中以编程方式选择登录模块_Java_Authentication_Login_Jboss_Jboss7.x - Fatal编程技术网

Java 在JBoss中以编程方式选择登录模块

Java 在JBoss中以编程方式选择登录模块,java,authentication,login,jboss,jboss7.x,Java,Authentication,Login,Jboss,Jboss7.x,我正在开发一个web应用程序,它托管在JBossAS7.1.1上,将由两个不同公司的用户使用 为了进行身份验证,除了用户名和密码,用户还必须提供他们所属的公司。 根据该公司的说法,身份验证将针对数据库或Active Directory服务器 我需要对Active Directory服务器进行身份验证: <login-module code="org.jboss.security.auth.spi.LdapExtLoginModule" flag="required" > &l

我正在开发一个web应用程序,它托管在JBossAS7.1.1上,将由两个不同公司的用户使用

为了进行身份验证,除了用户名和密码,用户还必须提供他们所属的公司。 根据该公司的说法,身份验证将针对数据库或Active Directory服务器

我需要对Active Directory服务器进行身份验证:

<login-module code="org.jboss.security.auth.spi.LdapExtLoginModule" flag="required" >
    <module-option name="java.naming.provider.url">ldap://ldaphost:389</module-option>
    <module-option name="bindDN">searchuser</module-option>
    <module-option name="bindCredential">password</module-option>
    <module-option name="baseCtxDN">CN=Users,DC=example,DC=com</module-option>
    <module-option name="baseFilter">(sAMAccountName={0})</module-option>
    <module-option name="rolesCtxDN">CN=Users,DC=example,DC=com</module-option>
    <module-option name="roleFilter">(member={1})</module-option>
    <module-option name="roleAttributeID">CN</module-option>
    <module-option name="roleAttributeIsDN">false</module-option>
    <module-option name="roleRecursion">2</module-option>
    <module-option name="searchScope">ONELEVEL_SCOPE</module-option>
    <module-option name="allowEmptyPasswords">false</module-option>
</login-module>
根据用户提供的公司,如何管理身份验证和选择正确的登录模块?
谢谢你的帮助。

我看到了更多可能的方法:

您可以在一个域中配置两个登录模块,并使用标志=足够。当第一个登录模块失败时,第二个登录模块将用作备用模块。那么您不需要登录时提供的公司名称

正如Darran已经回复的,您可以实现自己的登录模块。您应该考虑如何在登录模块中获取公司名称:

读取公司字段值请求对象

HttpServletRequest PolicyContext.getContextjavax.servlet.http.HttpServletRequest

将公司和用户名放在一起,并使用为基于密码的身份验证机制提供的标准回调来读取用户名和密码。例如,您的用户名可以看起来像companyuser

如果身份验证类型是表单,那么在登录表单上有3个字段很简单-company、j_username、j_password,在提交表单之前,使用JavaScript在提交的j_username字段前面加上company字段的内容


我在JBoss社区论坛上也问了同样的问题:非常感谢!工作起来很有魅力!
<login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule" flag="required">
    <module-option name="unauthenticatedIdentity" value="guest"/>
    <module-option name="dsJndiName" value="java:/my-ds"/>
    <module-option name="principalsQuery" value="SELECT password FROM users WHERE username = ?"/>
    <module-option name="rolesQuery" value="SELECT DISTINCT role_id, 'Roles' FROM roles WHERE username = ?"/>
</login-module>