Spring MVC: дважды запрос на авторизацию - форма входа и окно браузера. ПОЧЕМУ? - PullRequest
0 голосов
/ 16 марта 2020

Проблема в том, что после успешной авторизации в форме входа в систему (логин. jsp), при попытке доступа к контроллерам (путь: отдых / профиль), появляется окно браузера с запросом имени пользователя и пароля (httpbasi * 1013). *).

ВОПРОС: почему Spring Security требует двойной аутентификации - недостаточно ввести пароль в форме входа в систему?

логин. jsp:

<%@ page contentType="text/html" pageEncoding="UTF-8" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>

<html>
<jsp:include page="fragments/headTag.jsp"/>
<body>
<jsp:include page="fragments/bodyHeader.jsp"/>
<div class="container">
    <div class="d-flex justify-content-center h-100">
        <div class="card">
            <div class="card-header">
                <h3><spring:message code="app.signIn"/></h3>
            </div>
            <div class="card-body">
                <form:form id="login_form" action="spring_security_check" method="post">
                    <div class="input-group form-group">
                        <div class="input-group-prepend">
                            <span class="input-group-text"><i class="fas fa-user"></i></span>
                        </div>
                        <input type="text" name="username" class="form-control" placeholder="<spring:message code="user.login"/>">

                    </div>
                    <div class="input-group form-group">
                        <div class="input-group-prepend">
                            <span class="input-group-text"><i class="fas fa-key"></i></span>
                        </div>
                        <input type="password" name="password"  class="form-control" placeholder="<spring:message code="user.password"/>">
                    </div>
                    <div class="row align-items-center remember">
                        <input type="checkbox"><spring:message code="app.rememberMe"/>
                    </div>
                    <div class="form-group">
                        <button type="submit" class="btn float-right yellow_btn"><spring:message code="app.login"/></button>
                    </div>
                </form:form>
            </div>
            <br>
            <div class="card-footer">
                <div class="d-flex justify-content-center links">
                    <spring:message code="app.notProfileQuestion"/>
                </div>
                <div class="d-flex form-group justify-content-center">
                    <a class="btn yellow_btn" href="profile/register"><spring:message code="app.register"/> &raquo;</a>
                </div>
            </div>
        </div>
    </div>
</div>
</body>
</html>

spring-security. xml

<beans:beans xmlns="http://www.springframework.org/schema/security"
             xmlns:beans="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd">

    <http pattern="/resources/**" security="none"/>
    <http pattern="/webjars/**" security="none"/>

    <http pattern="/rest/**" use-expressions="true" name="restSecurityFilterChain" create-session="stateless">
        <http-basic/>
        <intercept-url pattern="/rest/profile/register" access="isAnonymous()"/>
        <intercept-url pattern="/**" access="isAuthenticated()"/>
        <csrf disabled="true"/>
    </http>

    <beans:bean class="org.springframework.security.crypto.factory.PasswordEncoderFactories" id="passwordEncoder" factory-method="createDelegatingPasswordEncoder"/>

    <http>
        <intercept-url pattern="/login" access="permitAll()"/>
        <intercept-url pattern="/profile/register" access="isAnonymous()"/>

        <intercept-url pattern="/**" access="isAuthenticated()"/>

        <form-login login-page="/login" default-target-url="/profile"
                    authentication-failure-url="/login?error=true"
                    login-processing-url="/spring_security_check"/>
        <logout logout-success-url="/login"/>
        <!--<csrf disabled="true"/>-->
    </http>

    <authentication-manager>
        <authentication-provider user-service-ref="userService">
            <password-encoder ref="passwordEncoder"/>


        </authentication-provider>
    </authentication-manager>
</beans:beans>

Как решить проблему? Я хочу ввести пароль только один раз - на странице входа.

...