#spring-security #struts-1
#spring-безопасность #struts-1
Вопрос:
В нашем приложении есть struts MVC, и теперь мы хотим интегрировать spring security. Я могу успешно интегрировать его и развернуть приложение.
Чтобы получить пользовательскую страницу входа, мы должны добавить форму входа в XML-файл spring security. У меня возникли трудности с интеграцией пользовательских страниц входа.
Глобальная пересылка Struts
<global-forwards>
<forward name="login" path="/" redirect="true"/>
</global-forwards>
Когда мы не вошли в систему, мы перейдем на страницу входа
Конфигурация входа в Web xml
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.vm</form-login-page>
<form-error-page>/loginError.vm</form-error-page>
</form-login-config>
</login-config>
Приведенный выше раздел в web.xml удаляется как часть интеграции с spring security. Скорее у меня есть следующий раздел в Spring security
<intercept-url pattern="/**" access="hasRole('ROLE')" />
<form-login login-page="/login.vm"
authentication-failure-url="/loginError.vm" />
Но когда я пытаюсь войти в систему, я не получаю пользовательскую страницу входа, а просто указывает url на IP:PORT / APP /login.vm, а страница отсутствует.
Форма входа имеет j_spring_security
action="j_spring_security_check"
Какие изменения требуются для получения пользовательского входа?
Следует ли изменить конфигурацию strut?
Ответ №1:
Я предполагаю здесь, но я подозреваю, что вы получаете это, поскольку Spring Security не понимает / не знает о скорости. У меня была аналогичная проблема, когда я интегрировал Spring Security в свое приложение Struts, используя страницы .jsp. В конце я указал страницу входа и URL-адрес сбоя аутентификации, чтобы указать на действия, и оттуда загрузил страницы jsp. Я предлагаю вам попробовать то же самое.
Комментарии:
1. Должны ли мы указывать весь путь с помощью формы входа? например, это должно быть login-page =»action.do » должно быть дано? или просто login-page =»действие»? Поскольку в web xml уже есть <servlet-name>действие</servlet-name> <url-шаблон>*.do</url-шаблон>
2. Попробовал следующее. Но не повезло Auth»> <forward name=»success» path =»/login.vm»/> </action> И в классе действий переопределить выполнение и вернуть действие вперед «success». Но все же URL-адрес указывает на auth, и в нем говорится, что страница не работает, имеет ли значение порядок веб-xml?
3. Работает ли это, если вы вызываете действие auth непосредственно из браузера?
4. Также проверьте свой URL-адрес перехвата. Я думаю, что с тем определением, которое у вас есть, требуется, чтобы у вас была роль ROLE для доступа к любому URL-адресу в вашем приложении, и вам не может быть назначена роль, пока вам не удастся войти в систему. У вас должен быть неограниченный доступ к вашему действию входа в систему.
5. Хорошо, дальнейшую диагностику немного сложно провести без каких-либо подробностей о сообщениях об ошибках или трассировках стека. Я бы предложил три вещи. Во-первых, переключите ведение журнала в режим отладки, во-вторых, измените свой URL-адрес перехвата, чтобы перехватывать только одно конкретное действие, пока все не заработает. Легко непреднамеренно заблокировать доступ к нужному вам материалу. В-третьих, используйте плагин Struts 2 config-browser и убедитесь, что Struts поместил ваше действие входа в систему туда, где вы думаете.