Я продолжаю находить уже заданные вопросы, которые близки к моим, но, похоже, не могут найти точный ответ, который я ищу. Я предполагаю, что решение для того, что я хочу сделать, довольно просто.Пароль, защищающий две веб-страницы с весной 3.1
У меня есть веб-сайт со страницей по умолчанию (index.jsp). Существует ссылка с индексной страницы на страницу администратора (admin.jsp). Эта страница долгое время защищена паролем с Spring без проблем. Вот контекст безопасности файлов я использую:
<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-3.1.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.1.xsd">
<global-method-security pre-post-annotations="enabled" secured-annotations="enabled"/>
<http use-expressions="true">
<intercept-url pattern="/admin.jsp" access="hasRole('administrator')" />
<intercept-url pattern="/**" access="permitAll" />
<form-login login-page="/login.jsp" default-target-url="/admin.jsp" />
<logout />
</http>
<authentication-manager>
<authentication-provider>
<user-service>
<user name="${admin.username}" password="${admin.password}" authorities="administrator" />
</user-service>
</authentication-provider>
</authentication-manager>
</beans:beans>
теперь у меня есть необходимость защитить паролем index.jsp, а также. Если я дублирует дочерние элементы для элемента (и я создал отдельные Login.jsp файлы, не уверен, если это необходимо), как это:
<http use-expressions="true">
<intercept-url pattern="/index.jsp" access="hasRole('user')" />
<form-login login-page="/indexLogin.jsp" default-target-url="/index.jsp" />
<logout />
<intercept-url pattern="/admin.jsp" access="hasRole('administrator')" />
<form-login login-page="/adminLogin.jsp" default-target-url="/admin.jsp" />
<logout />
</http>
<authentication-manager>
<authentication-provider>
<user-service>
<user name="${admin.username}" password="${admin.password}" authorities="administrator" />
<user name="${user.username}" password="${user.password}" authorities="user" />
</user-service>
</authentication-provider>
</authentication-manager>
Тогда index.jsp является защищенным паролем точно так, как ожидалось. Однако, если я нажму кнопку, которая открывает страницу admin.jsp на новой вкладке, я получаю сообщение об ошибке 403 - Access. Я предполагаю, что это потому, что он автоматически пытается использовать учетные данные пользователя на странице администратора.
Затем я попытался создать два отдельных элементов, каждый из которых с элементами для каждой отдельной страницы:
<http use-expressions="true">
<intercept-url pattern="/index.jsp" access="hasRole('user')" />
<form-login login-page="/indexLogin.jsp" default-target-url="/index.jsp" />
<logout />
</http>
<http use-expressions="true">
<intercept-url pattern="/admin.jsp" access="hasRole('administrator')" />
<form-login login-page="/adminLogin.jsp" default-target-url="/admin.jsp" />
<logout />
</http>
Тогда я получаю сообщение об ошибке с указанием:
java.lang.IllegalArgumentException: Шаблон универсального матча ('/ **') определяется перед другими шаблонами в цепочке фильтров, заставляя их игнорировать. Пожалуйста, проверьте заказ в вашем пространстве имен или конфигурации фильтра FilterChainProxy.
Может ли кто-нибудь дать мне указатель на то, как заставить Spring запрашивать учетные данные каждый раз, когда он обращается к index.jsp или admin.jsp и не допускает, чтобы существующие учетные данные должен быть использован?
. Я понимаю концепцию, которую вы объясняете, и мне она нравится, однако, когда я следую что вы описали, я получил в браузере следующее: «Страница не перенаправляется должным образом. Firefox обнаружил, что сервер перенаправляет запрос на этот адрес таким образом, который никогда не будет завершен». Когда я обращаюсь к url по умолчанию, я перенаправлен в файл приветственного файла (index.jsp), и я могу видеть в адресной строке, что меня перенаправляют на login.jsp. Вот когда я вижу ошибку в Firefox. – Bal
Простое изменение to исправил проблему! –
Bal