1

我在 JBoss 7 上的 webapp 中使用基于表单的身份验证,由 LdapLoginModule 支持。

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Protected Resources</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>*</role-name>
    </auth-constraint>
    <user-data-constraint>
        <transport-guarantee>NONE</transport-guarantee>
    </user-data-constraint>
</security-constraint>
<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>ldap</realm-name>
    <form-login-config>
        <form-login-page>login.html</form-login-page>
        <form-error-page>login.html</form-error-page>
    </form-login-config>
</login-config>

在访问/时,我被发送到 login.html,如果我输入了无效密码,则到 /j_security_check。如果我输入了正确的密码,虽然我被发送到 / 但在浏览器中出现以下错误:

HTTP Status 403 - Access to the requested resource has been denied

为什么在成功协商登录表单后我会被拒绝访问 index.html?没有任何日志输出的迹象。

4

1 回答 1

1

这似乎归结为基于角色的身份验证。它现在正在使用以下 web.xml(现在作为 2.5 而不是 2.3 网络应用程序):

<security-role>
    <role-name>*</role-name>
</security-role>
<security-constraint>
    <web-resource-collection>
        <web-resource-name>Protected Resources</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>*</role-name>
    </auth-constraint>
    <user-data-constraint>
        <transport-guarantee>NONE</transport-guarantee>
    </user-data-constraint>
</security-constraint>
<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>ldap</realm-name>
    <form-login-config>
        <form-login-page>/login.html</form-login-page>
        <form-error-page>/login.html</form-error-page>
    </form-login-config>
</login-config>

以及以下 JBoss 登录模块:

<login-module code="org.jboss.security.auth.spi.LdapExtLoginModule" flag="required">
    <module-option name="java.naming.provider.url" value="ldap://localhost:389"/>
    <module-option name="java.naming.security.authentication" value="simple"/>
    <module-option name="bindDN" value="cn=Manager,dc=domain,dc=com"/>
    <module-option name="baseCtxDN" value="ou=people,dc=domain,dc=com"/>
    <module-option name="baseFilter" value="(cn={0})"/>
    <module-option name="bindCredential" value="password"/>
    <module-option name="principalDNPrefix" value="cn="/>
    <module-option name="principalDNSuffix" value=",ou=people,dc=domain,dc=com"/>
    <module-option name="rolesCtxDN" value="ou=groups,dc=domain,dc=com"/>
    <module-option name="uidAttributeID" value="uid"/>
    <module-option name="matchOnUserDN" value="true"/>
    <module-option name="roleAttributeID" value="cn"/>
    <module-option name="roleAttributeIsDN" value="false"/>
    <module-option name="roleRecursion" value="-1"/>
    <module-option name="roleFilter" value="(member={1})"/>
    <module-option name="allowEmptyPasswords" value="false"/>
    <module-option name="Context.REFERRAL" value="follow"/>
    <module-option name="throwValidateError" value="true"/>
</login-module>
于 2012-10-20T18:52:26.887 回答