Проверка входа пользователя для любого URL-адреса с использованием Spring Security

Я использую весеннюю безопасность для аутентификации моего веб-приложения. Я мог бы успешно использовать его, настроив следующим образом:

<http auto-config='true'>
    <intercept-url pattern="/Login" filters="none" access="ROLE_USER"/>
    <form-login login-page='/Login' authentication-failure-url="/Login/Failure" 
        default-target-url="/Url"/>
</http>

<authentication-manager>
    <authentication-provider>
        <user-service>
           <user name="admin" password="admin" authorities="ROLE_USER" />
        </user-service>
    </authentication-provider>
</authentication-manager>

Приведенный выше код работает нормально, если я напрямую вхожу со страницы входа. Если один из пользователей обращается к другому URL-адресу, который не является страницей входа. Теперь я хочу ограничить доступ пользователя к любому прямому URL-адресу без входа в систему в первый раз.

Как я могу это сделать?


person Krishna    schedule 04.06.2012    source источник


Ответы (1)


Вам нужно изменить правило перехвата на:

<intercept-url pattern="/**" filters="none" access="ROLE_USER"/>

Возможно, вам также придется исключить страницу входа из требования аутентификации. Потому что пользователю не нужно входить в систему, чтобы увидеть страницу входа. Вы можете сделать это, добавив:

<intercept-url pattern="/Login" filters="none"/>
person nfechner    schedule 04.06.2012
comment
нет.. не работает. Это происходит в бесконечном цикле при изменении строки выше. Пожалуйста, предоставьте, если у вас есть предложения - person Krishna; 04.06.2012
comment
Пожалуйста, прочитайте мой обновленный ответ. Вам нужно добавить дополнительное правило, чтобы исключить страницу входа. - person nfechner; 04.06.2012
comment
Просто заметка. filters="none" не рекомендуется использовать в spring 3.0, так как он полностью пропускает цепочку фильтров, таким образом обходя безопасность. Также он не будет работать на весне 3.1. Вместо этого вы должны использовать access="permitAll". - person Simeon; 04.06.2012
comment
Другое дело, что filters="none" не будет работать с паттерном /** ни в одной весенней версии безопасности. Вот почему stackoverflow .com/questions/6216160/ - person Simeon; 04.06.2012