Несколько <http>элементов в Spring security - PullRequest
8 голосов
/ 02 июня 2011

Недавно Spring Security предоставила возможность настроить несколько <http> элементов.Я пытаюсь установить конфигурацию для всех URL-адресов, которые сопоставляют шаблон / foo / *, и другую для остальных.Теперь у меня есть две страницы входа, одна из которых установлена ​​в / login, а другая в / foo login.Поэтому я хочу, чтобы все URL, которые сопоставляют / foo / **, выполняют вход в систему с /foo/login.

. Я создал конфигурацию, подобную приведенной ниже, но при вводе URL, например, / foo / что-то(что не должно быть разрешено анонимному пользователю) вместо того, чтобы перейти в / foo / login, он переходит в /login.

Версия Spring Security: 3.1.0.RC1 .Есть идеи о том, что может происходить?

Спасибо.

<sec:http auto-config="true" pattern="/foo/**" entry-point-ref="ajaxAuthenticationEntryPoint">
    <sec:intercept-url pattern="/foo/login" access="ROLE_ANONYMOUS,ROLE_BASIC,ROLE_ADMIN" />
    ...
    <!-- other sec:intercepts for some /foo/* urls -->
    ...
    <sec:intercept-url pattern="/foo/**" access="ROLE_BASIC" />

    <sec:custom-filter before="SECURITY_CONTEXT_FILTER" ref="basicProcessingFilter" />

    <sec:form-login login-page="/foo/login" authentication-failure-url="/foo/login" default-target-url="/index" always-use-default-target="true" />

    <sec:session-management>
        <sec:concurrency-control max-sessions="1" error-if-maximum-exceeded="true" expired-url="/login" />
    </sec:session-management>
</sec:http>

<sec:http auto-config="true" pattern="/**" entry-point-ref="ajaxAuthenticationEntryPoint">
    <!-- some sec:intercepts for some urls -->
    ...

    <sec:intercept-url pattern="/**" access="ROLE_ADMIN" />

    <sec:custom-filter before="SECURITY_CONTEXT_FILTER" ref="basicProcessingFilter" />

    <sec:form-login login-page="/login" default-target-url="/index" always-use-default-target="true" />

    <sec:session-management>
        <sec:concurrency-control max-sessions="1" error-if-maximum-exceeded="true" expired-url="/login" />
    </sec:session-management>
</sec:http>

Ответы [ 3 ]

1 голос
/ 16 января 2012

AuthenticationEntryPoint отвечает за перенаправление на страницу входа. Вы ввели пользовательскую точку входа, которая переопределит атрибут login-page в элементе form-login.

ajaxAuthenticationEntryPoint перенаправляет на /login?

В идеале Spring Security должна определить, пытаетесь ли вы использовать пользовательскую точку входа и login-page, и сообщить о предупреждении.

1 голос
/ 02 июня 2011

Просто предположение. Может ли быть так, что шаблоны являются аддитивными?

Итак, следующая аннотация:

<sec:http auto-config="true" pattern="/foo/**" entry-point-ref="ajaxAuthenticationEntryPoint">
    <sec:intercept-url pattern="/foo/**" access="ROLE_BASIC" />
</sec:http>

перехватывает /foo/foo/**. Это приведет к тому, что запрос foo/something будет перехвачен вашим вторым определением http, с pattern="/**"

0 голосов
/ 14 июля 2011

Использование атрибута pattern в элементе http заставляет Spring Security 3.1 применить этот шаблон к URL-адресу перед чтением остальных внутренних элементов, поэтому, если он не совпадает, он игнорирует все внутренние элементы и переходит кследующий элемент http.

Что-то на странице входа в систему для / foo / login ссылается на ресурс, на который распространяется шаблон / **?

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