验证登录模块标志足够不适用于两个模块,但单独工作

时间:2017-10-30 13:41:40

标签: security authentication java-ee jboss wildfly

如果我单独测试它们工作得很好但是当我把它们放在一起时,数据库模块和Ldap模块都不能正确验证。

我错过了什么?

standalone.xml

...
<authentication>
    <login-module code="LdapExtended" flag="sufficient">
        <module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
        <module-option name="java.naming.provider.url" value="ldap://ldap.domain.net:389"/>
        <module-option name="java.naming.security.authentication" value="simple"/>
        <module-option name="baseCtxDN" value="dc=domain,dc=global"/>
        <module-option name="baseFilter" value="(&amp;(uid={0})(memberOf=cn=rol,ou=Rols,ou=Groups,dc=rol,dc=global))"/>
        <module-option name="rolesCtxDN" value="ou=Rols,ou=Groups,dc=rol,dc=global"/>
        <module-option name="roleFilter" value="(member=uid={1},ou=Users,dc=rol,dc=global)"/>
        <module-option name="roleAttributeID" value="cn"/>
        <module-option name="roleAttributeIsDN" value="false"/>
        <module-option name="searchScope" value="SUBTREE_SCOPE"/>
        <module-option name="allowEmptyPasswords" value="true"/>
    </login-module>
    <login-module code="Database" flag="sufficient">
        <module-option name="dsJndiName" value="java:jboss/datasources/MySqlDS"/>
        <module-option name="principalsQuery" value="SELECT password FROM t_user WHERE username = ?"/>
        <module-option name="rolesQuery" value="SELECT none, 'Roles' FROM t_user WHERE username = ?"/>
    </login-module>
</authentication>
...

的web.xml

...
<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>myrealm</realm-name>
    <form-login-config>
        <form-login-page>/login.xhtml</form-login-page>
        <form-error-page>/login-error.xhtml</form-error-page>
    </form-login-config>
</login-config>
...

使用j_username和j_password调用j_security_check作为默认值的表单。

1 个答案:

答案 0 :(得分:0)

这是角色查询的问题,它会引发错误并且所有模块都停止工作。 当查询没有返回任何值时,会发生同样的错误。

<module-option name="rolesQuery" value="SELECT none, 'Roles' FROM t_user WHERE username = ?"/>

没有人应该进入撇号(&#39;&#39;),因为它不是表格的一个字段。