Неверные учетные данные Ldap не загружают URL-адрес ошибки аутентификации

Возможность выполнять пользовательскую аутентификацию ldap для внешних органов управления базами данных. Но когда я пытаюсь проверить неправильный пароль, URL-адрес сбоя аутентификации не отображается, вместо этого мой браузер печатает сведения об исключении. Ниже приведен мой файл securitycontext.xml и данное исключение:

<http auto-config="false" access-decision-manager-ref="accessDecisionManager" access-denied-page="/accessDenied.jsp">
    <!-- Restrict access to ALL other pages -->
    <intercept-url pattern="/index.jsp" filters="none" />
    <!-- Don't set any role restrictions on login.jsp -->
    <intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />
    <intercept-url pattern="/service/**" access="PRIV_Report User, PRIV_305" />

    <logout logout-success-url="/index.jsp" />
    <form-login authentication-failure-url="/index.jsp?error=1" default-target-url="/home.jsp" />
    <anonymous/>
</http>

<b:bean id="accessDecisionManager" class="org.springframework.security.vote.AffirmativeBased">
    <b:property name="decisionVoters">
        <b:list>
            <b:ref bean="roleVoter" />
            <b:ref bean="authenticatedVoter" />
        </b:list>
    </b:property>
</b:bean>

<b:bean id="roleVoter" class="org.springframework.security.vote.RoleVoter">
    <b:property name="rolePrefix" value="PRIV_" />
</b:bean>
<b:bean id="authenticatedVoter" class="org.springframework.security.vote.AuthenticatedVoter">
</b:bean>

<b:bean id="contextSource" class="org.springframework.security.ldap.DefaultSpringSecurityContextSource">
    <b:constructor-arg value="ldap://mydomain:389" />
</b:bean>
<b:bean id="ldapTemplate" class="org.springframework.ldap.core.LdapTemplate">
    <b:constructor-arg ref="contextSource" />
</b:bean>

<b:bean id="ldapAuthenticationProvider"
        class="com.zo.sas.gwt.security.login.server.SASLdapAuthenticationProvider">
        <b:property name="authenticator" ref="ldapAuthenticator" />
        <custom-authentication-provider />
</b:bean>

<b:bean id="ldapAuthenticator"
        class="com.zo.sas.gwt.security.login.server.SASAuthenticator">
        <b:property name="contextSource" ref="contextSource" />
        <b:property name="userDnPatterns">
            <b:value>uid={0},OU=People</b:value>
        </b:property>
</b:bean> 

И мои журналы исключений:

org.springframework.ldap.AuthenticationException: [LDAP: error code 49 - Invalid Credentials]; nested exception is javax.naming.AuthenticationException: [LDAP: error code 49 - Invalid Credentials]
    org.springframework.ldap.support.LdapUtils.convertLdapException(LdapUtils.java:180)
    org.springframework.ldap.core.support.AbstractContextSource.createContext(AbstractContextSource.java:266)
    org.springframework.ldap.core.support.AbstractContextSource.getContext(AbstractContextSource.java:106)
    com.zo.sas.gwt.security.login.server.SASAuthenticator.authenticate(SASAuthenticator.java:55)
    com.zo.sas.gwt.security.login.server.SASLdapAuthenticationProvider.authenticate(SASLdapAuthenticationProvider.java:45)
    org.springframework.security.providers.ProviderManager.doAuthentication(ProviderManager.java:188)
    org.springframework.security.AbstractAuthenticationManager.authenticate(AbstractAuthenticationManager.java:46)
    org.springframework.security.ui.webapp.AuthenticationProcessingFilter.attemptAuthentication(AuthenticationProcessingFilter.java:82)
    org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:258)
    org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
    org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
    org.springframework.security.ui.logout.LogoutFilter.doFilterHttp(LogoutFilter.java:89)
    org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
    org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
    org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235)
    org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
    org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
    org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:175)
    org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:183)
    org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:138)

Это мой index.jsp

<html>
<script type="text/javascript" language="javascript">
    var dictionary = {
            loginErr: "${SPRING_SECURITY_LAST_EXCEPTION.message}",
            error: "${param.error}"
            };
</script>

    <head>
    </head>
    <body >
       <iframe src="javascript:''" id="__gwt_historyFrame" style="width:0;height:0;border:0"></iframe>

        <script type="text/javascript" language="javascript" src="com.zo.sas.gwt.sasworkflow.home.Home.nocache.js"></script>
    </body>
</html>

person Community    schedule 30.07.2009    source источник


Ответы (2)


этот журнал мало что говорит. Вы должны поместить org.springframework в журнал на уровне DEBUG и посмотреть, что происходит.
Ищите следующие сообщения: "Updated SecurityContextHolder, чтобы содержать null Authentication " и "Ошибка запроса аутентификации: ", после этого должно быть перенаправление на index.jsp.
Какой код index.jsp?

person rodrigoap    schedule 30.07.2009
comment
Спасибо за ответ, но я не получаю это сообщение. И в случае сбоя мой URL-адрес будет localhost/sas/j_spring_security_check, который отображается со статусом http 500 и журналом ошибок, содержащим то, что я наклеивал ранее. - person ; 01.08.2009

Это правильное сообщение об ошибке, LDAP: код ошибки 49 — Неверные учетные данные, возможно, не тот формат, который вам нужен.

Сервер LDAP должен передавать подкод по той причине, что в Active Directory есть список:
коды AD LDAP 49, и eDirectory обычно отправляет ошибку 669 для неверного пароля или 601 для неверного DN. Хотя я думаю, что это изменилось в последних двух версиях, и все они отображаются как ошибки 669 в eDirectory, чтобы не помогать злоумышленникам определять настоящие имена пользователей.

person geoffc    schedule 31.07.2009