Весенняя безопасность помнит, что я дал ошибку: ERR_TOO_MANY_REDIRECTS - PullRequest
0 голосов
/ 14 сентября 2018

Я недавно реализовал функцию Spring Security Token based remember me в моем Java Spring MVC web application. Мой Spring-security.xml тьфу выглядит следующим образом:

<http auto-config="true" use-expressions="true">
    <intercept-url pattern="/login**" access="permitAll" />
    <intercept-url pattern="/layout/**" access="permitAll" />
    <intercept-url pattern="/min/**" access="permitAll" />
    <intercept-url pattern="/rest/v3/**" access="permitAll" />
    <intercept-url pattern="/password/**" access="permitAll" />
    <intercept-url pattern="/register/**" access="permitAll" />
    <intercept-url pattern="/unsubscribe/**" access="permitAll" />
    <intercept-url pattern="/**" access="isFullyAuthenticated()"/>

        <form-login login-page="/login" default-target-url="/"
            authentication-failure-url="/login?error" username-parameter="username"
            password-parameter="password" />
        <logout logout-success-url="/login?logout" invalidate-session="false"  />

        <!-- enable csrf protection
        <csrf />
        -->
        <!-- access denied page -->
        <access-denied-handler error-page="/403" />

        <logout delete-cookies="JSESSIONID"/>
        <remember-me key="myAppKey" />

    </http>

После реализации этой функции работает функция запомнить меня. Но я получаю ошибку следующим образом: Error Screen

Я попытался добавить опцию permitAll() к логину `URL ', как это понимается из некоторых документов. Но, кажется, ничего не работает для меня. Такая же конфигурация работает для меня во всех других моих веб-приложениях.

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

На самом деле вам не нужно разрешение на страницу входа:

Вне вашего http tag, добавьте это

<http security="none" pattern="/login" />

и удалите

<intercept-url pattern="/login**" access="permitAll" />

Это относится к тем случаям, когда вы тоже хотите загружать файлы CSS / JS

Ваш файл будет выглядеть следующим образом, например:

    <http security="none" pattern="/login" />
    <http security="none" pattern="/layout/**" />
    <http security="none" pattern="/min/**" />

    <http auto-config="true" use-expressions="true">

        <intercept-url pattern="/rest/v3/**" access="permitAll" />
        <intercept-url pattern="/password/**" access="permitAll" />
        <intercept-url pattern="/register/**" access="permitAll" />
        <intercept-url pattern="/unsubscribe/**" access="permitAll" />
        <intercept-url pattern="/**" access="isFullyAuthenticated()"/>

            <form-login login-page="/login" default-target-url="/"
                authentication-failure-url="/login?error" username-parameter="username"
                password-parameter="password" />
            <logout logout-success-url="/login?logout" invalidate-session="false"  />

            <!-- enable csrf protection
            <csrf />
            -->
            <!-- access denied page -->
            <access-denied-handler error-page="/403" />

            <logout delete-cookies="JSESSIONID"/>
            <remember-me key="myAppKey" />

     </http>

Справочная документация Spring Security: https://docs.spring.io/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#ns-minimal

3.2.3 Форма и основные параметры входа в систему

Обратите внимание, что вы все еще можете использовать автоконфигурацию. Элемент form-login просто переопределяет настройки по умолчанию. Также обратите внимание, что мы добавили дополнительный элемент intercept-url, чтобы сообщить, что любые запросы на страницу входа должны быть доступны анонимным пользователям [5]. В противном случае запрос будет соответствовать шаблону / **, и сам доступ к странице входа будет невозможен! Это распространенная ошибка конфигурации, которая приводит к бесконечному циклу в приложении. Spring Security выдаст предупреждение в журнале, если ваша страница входа будет защищена. Также можно сделать так, чтобы все запросы, соответствующие определенному шаблону, полностью обходили цепочку фильтров безопасности, определяя отдельный элемент http для шаблона следующим образом:

0 голосов
/ 14 сентября 2018

Попробуйте изменить

<intercept-url pattern="/login**" access="permitAll" />

ДО

<intercept-url pattern="/login" access="permitAll" />
...