2009-09-03 2 views
0

Я немного поиграл с Spring Security и заметил следующую странность.Весенняя безопасность oddity в <intercept-url> при указании метода

Когда я указываю блок <http>, как это, в моем XML-контексте безопасности.

<http> 
    <http-basic/> 

    <port-mappings> 
     <port-mapping http="8080" https="8181"/> 
    </port-mappings> 

    <intercept-url pattern="/url1**" access="ROLE_ROLE1" requires-channel="https"/> 
    <intercept-url pattern="/url2**" access="ROLE_ROLE2"/> 
    <intercept-url pattern="/url3**" access="ROLE_ROLE3" /> 
    <!-- <intercept-url pattern="/**" access="ROLE_ADMIN" /> 
</http> 

Все URL-адреса, по-видимому, запускают базовую аутентификацию HTTP, когда я нажимаю на различные URL-адреса в браузере.

Это хорошо и то, что я ожидал, но когда я добавить параметр метода 1 из перехватывать URL, как это:

<http> 
    <http-basic/> 

    <port-mappings> 
     <port-mapping http="8080" https="8181"/> 
    </port-mappings> 

    <intercept-url pattern="/url1**" access="ROLE_ROLE1" requires-channel="https"/> 
    <intercept-url pattern="/url2**" access="ROLE_ROLE2" method="GET"/> 
    <intercept-url pattern="/url3**" access="ROLE_ROLE3" /> 
    <!-- <intercept-url pattern="/**" access="ROLE_ADMIN" /> 
</http> 

Базовая аутентификация отключена для всех URL, кроме того, я» ve явно задает метод на (/url2).

Это так, как это должно работать, потому что это кажется немного глупостью для меня. Это ошибка?

+0

Я пробовал и работает отлично. – rodrigoap

+0

, поэтому, когда вы переходите к url1, он запрашивает у вас вашу информацию об аутентификации? Я не только не вижу этот флажок, но не выполняет мой собственный менеджер аутентификации. Какая версия весенней безопасности у вас есть? Я использую 3.0.0.M2. – Vinnie

+0

Я тестировал url3, потому что не настроил https-коннектор для url1. Я использовал Spring Security 2.0.4 от spring-security-samples-tutorial-2.0.4.war. – rodrigoap

ответ

2

Теперь я проверил url1 с https и работает. Я перенаправлен, а затем появилось диалоговое окно входа в систему.
Настройка уровня ведения журнала для отладить печатает:

DEBUG DefaultFilterInvocationDefinitionSource,http-8443-1:196 - Converted URL to lowercase, from: '/url1/'; to: '/url1/' 
DEBUG DefaultFilterInvocationDefinitionSource,http-8443-1:224 - Candidate is: '/url1/'; pattern is /url2**; matched=false 
DEBUG DefaultFilterInvocationDefinitionSource,http-8443-1:224 - Candidate is: '/url1/'; pattern is /url1**; matched=true 
DEBUG AbstractSecurityInterceptor,http-8443-1:250 - Secure object: FilterInvocation: URL: /url1/; ConfigAttributes: [ROLE_USER] 
DEBUG XmlWebApplicationContext,http-8443-1:244 - Publishing event in context [o[email protected]17af46e]: org.springframework.security.event.authorization.AuthenticationCredentialsNotFoundEvent[source=FilterInvocation: URL: /url1/] 
DEBUG ExceptionTranslationFilter,http-8443-1:150 - Authentication exception occurred; redirecting to authentication entry point 

Это конфигурация:

<http> 
    <http-basic/> 
    <port-mappings> 
    <port-mapping http="8080" https="8443"/> 
    </port-mappings> 
    <intercept-url pattern="/url1**" access="ROLE_USER" requires-channel="https"/> 
    <intercept-url pattern="/url2**" access="ROLE_TELLER" method="GET"/> 
    <intercept-url pattern="/url3**" access="ROLE_SUPERVISOR" />  
</http> 
+0

Спасибо за внимание! Это выглядит так же, как и у меня. Единственное, что я могу понять, это то, что это новая ошибка в 3.0.0.M2, которой не было в версии 2.0.4. – Vinnie

+1

Как вы сказали, это ошибка. Я тестировал его с 3.0.0 M2. Также я обнаружил, где ошибка, поэтому я сообщил об этом их Джире: http://jira.springsource.org/browse/SEC-1236 – rodrigoap

 Смежные вопросы

  • Нет связанных вопросов^_^