Обновление до Spring Security 4 прерывает вход - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь перейти на Spring 4.0.1 с Spring 3.2.8 / Spring Security 3.2.4. После входа в систему он перенаправляет меня обратно на страницу входа без ошибок в файле журнала.

Вот моя конфигурация Spring Security 3:

<beans:bean id="daoAuthenticationProvider"
            class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
    <beans:property name="userDetailsService" ref="userDetailsService" />
</beans:bean>

<beans:bean id="authenticationManager"
            class="org.springframework.security.authentication.ProviderManager">
    <beans:property name="providers">
        <beans:list>
            <beans:ref local="daoAuthenticationProvider" />
        </beans:list>
    </beans:property>
</beans:bean>

<authentication-manager>
    <authentication-provider user-service-ref="userDetailsService">
    </authentication-provider>
</authentication-manager>

Конфигурация Spring Security 4:

<beans:bean id="daoAuthenticationProvider"
            class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
    <beans:property name="userDetailsService" ref="userDetailsService" />
</beans:bean>

<beans:bean id="authenticationManager"
            class="org.springframework.security.authentication.ProviderManager">
    <beans:constructor-arg>
        <beans:list>
            <beans:bean class= "org.springframework.security.authentication.dao.DaoAuthenticationProvider">
                <beans:property name="userDetailsService" ref="userDetailsService"/>
            </beans:bean>
        </beans:list>
    </beans:constructor-arg>
</beans:bean>

Форма входа:

    <form class="form-signin" action='<spring:url value="/j_spring_security_check" />' method="POST">
        <h3 class="form-signin-heading">Please sign in</h3>

        <input type="text" class="input-block-level loginTextInput" placeholder="Username" name="j_username" id="j_username" autofocus="autofocus" >
        <input type="password" class="input-block-level loginTextInput" placeholder="Password" name="j_password" id="j_password">
        <button class="onWhite" type="submit">Sign in</button>

        <div>&nbsp;</div>

        <c:if test="${param.login_error == '1'}">
            <div class="alert alert-error">
                    <strong>Error:</strong> Invalid username/password combination.          
            </div>
        </c:if>
        <c:if test="${param.logout == '2'}">
            <div class="alert">
                You have been logged out.
            </div>
        </c:if>

Что я делаю не так?

1 Ответ

1 голос
/ 30 октября 2019

Имена атрибутов формы по умолчанию изменены с v3 на v4. Теперь должно быть просто password и username, но, очевидно, его можно настроить, если требуется что-то еще.

Так что простое изменение атрибутов имени, как показано ниже, должно решить проблему:

<input type="text" class="input-block-level loginTextInput" 
    placeholder="Username" name="username" id="j_username" autofocus="autofocus" >
<input type="password" class="input-block-level loginTextInput" 
     placeholder="Password" name="password" id="j_password">

https://docs.spring.io/spring-security/site/migrate/current/3-to-4/html5/migrate-3-to-4-xml.html#m3to4-xmlnamespace-form-login

Значение по умолчанию для атрибута form-login @ username-parameter изменено с j_username на username. Если приложение явно предоставляет атрибут, для переноса никаких действий не требуется.

Значение по умолчанию атрибута form-login @ password-parameter изменилось с j_password на пароль. Если приложение явно предоставляет атрибут, для переноса никаких действий не требуется.

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