Форма безопасности Spring-вход для struts

#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 поместил ваше действие входа в систему туда, где вы думаете.