Почему в форме входа в Spring не отображается информация об ошибке при неудачной регистрации? - PullRequest
0 голосов
/ 26 сентября 2010

Мое приложение Spring MVC не позволяет входить в систему, и я не могу понять, почему.

Я добавил запись в контроллер входа, но там ничего не выводится.

просто кажется, что страница входа автоматически перенаправляет на страницу ошибки, не проходя через контроллер входа.

Есть идеи, как отладить эту проблему?

<http auto-config="false" access-decision-manager-ref="accessDecisionManager" use-expressions="true">
    <intercept-url pattern="/login/**" access="hasRole('ROLE_ANONYMOUS')" requires-channel="${application.secureChannel}" />
    <intercept-url pattern="/error/**" access="hasRole('ROLE_ANONYMOUS')" requires-channel="http" />
    <intercept-url pattern="/register/**" access="hasRole('ROLE_ANONYMOUS')" requires-channel="${application.secureChannel}" />
    <intercept-url pattern="/" access="hasRole('ROLE_ANONYMOUS')" requires-channel="http" />
    <intercept-url pattern="/**" access="hasRole('ROLE_USER')" requires-channel="http" />
    <form-login login-page="/login" login-processing-url="/login/submit" authentication-failure-url="/login/error" />
    <logout logout-url="/logout" />
</http>

<authentication-manager alias="authenticationManager">
    <authentication-provider user-service-ref="userDetailsService">
        <password-encoder hash="sha-256" base64="true">
            <salt-source user-property="salt" />
        </password-encoder>
    </authentication-provider>
</authentication-manager>

<beans:bean id="userDetailsService" class="com.my.UserDetailsServiceImpl">
</beans:bean>

<beans:bean id="passwordEncoder" class="org.springframework.security.authentication.encoding.ShaPasswordEncoder">
    <beans:constructor-arg value="256" />
    <beans:property name="encodeHashAsBase64" value="true" />
</beans:bean>

<beans:bean id="roleHierarchy" class="org.springframework.security.access.hierarchicalroles.RoleHierarchyImpl">
    <beans:property name="hierarchy">
        <beans:value>
            ROLE_ADMIN > ROLE_USER
            ROLE_USER > ROLE_ANONYMOUS
        </beans:value>
    </beans:property>
</beans:bean>

<beans:bean id="accessDecisionManager" class="org.springframework.security.access.vote.AffirmativeBased">
    <beans:property name="decisionVoters">
        <beans:list>
            <beans:bean class="org.springframework.security.web.access.expression.WebExpressionVoter">
                <beans:property name="expressionHandler">
                    <beans:bean class="org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler">
                        <beans:property name="roleHierarchy" ref="roleHierarchy" />
                    </beans:bean>
                </beans:property>
            </beans:bean>
        </beans:list>
    </beans:property>
</beans:bean>

Ответы [ 3 ]

1 голос
/ 26 сентября 2010

Если нет журналирования SpringSecurity, то вам следует проверить настройки журналирования. Я точно знаю, что если вы правильно настроите ведение журнала и установите для уровня журнала значение DEBUG, вы получите обильные сообщения журнала.

(И если вы вообще не можете работать с журналированием, возможен прямой вывод на System.err ...)

Почему в форме входа Spring не отображается информация об ошибке для неудачного входа в систему?

Как правило, слишком частое сообщение конечному пользователю о том, почему его попытка входа в систему не удалась, плохо сказывается на безопасности. Например, если вы сообщаете пользователю, что имя учетной записи неверно или пароль неправильный, хакер может атаковать два учетных компонента по отдельности.

1 голос
/ 26 сентября 2010

Мое приложение Spring MVC не разрешает вход в систему, и я не могу понять, почему.

Убедитесь, что вы добавили следующую строку в свои log4j.properties для регистрации исключений, связанных с безопасностью.

log4j.logger.org.springframework.security = DEBUG

Если вы еще не добавили, сделайте это, после этого вы сможете увидеть что-то вроде этого (показано ниже) в своем лог-файле.

Authentication request failed: org.springframework.security.authentication.BadCredentialsException: Bad credentials

ВЕсли вы хотите отладить, поместите указатель отладки в ExceptionTranslationFilter.java следующим способом:

private void handleException(HttpServletRequest request, HttpServletResponse response, FilterChain chain,
            RuntimeException exception) throws IOException, ServletException {
        if (exception instanceof AuthenticationException) {
            if (logger.isDebugEnabled()) {
                logger.debug("Authentication exception occurred; redirecting to authentication entry point", exception);
            }

            sendStartAuthentication(request, response, chain, (AuthenticationException) exception);
        }

        ....
    }

Я добавил запись в контроллер входа, но там ничего не выводится.

Ваш LoginController не будет вызываться до успешной аутентификации.

1 голос
/ 26 сентября 2010

Если нет полезной информации журнала, связанной с Spring Security, я бы сделал следующий шаг - установил точку останова в org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpServletRequest, HttpServletResponse, FilterChain) и следовал по пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...