如果我单独测试它们工作得很好但是当我把它们放在一起时,数据库模块和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="(&(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作为默认值的表单。
答案 0 :(得分:0)
这是角色查询的问题,它会引发错误并且所有模块都停止工作。 当查询没有返回任何值时,会发生同样的错误。
<module-option name="rolesQuery" value="SELECT none, 'Roles' FROM t_user WHERE username = ?"/>
没有人应该进入撇号(&#39;&#39;),因为它不是表格的一个字段。