j_security_check не работает, когда ‹Context path=›

Я использую j_security_check как часть механизма JAAS на сервере tomcat/tomEE.

В настоящее время у меня есть контекст под названием «admin», в котором процесс входа в систему представлен в виде отдельной страницы (login.html), и эта страница входа имеет форму, подобную этой: <form action="j_security_check" method="post"> с соответствующими входными данными, отправляющими свойства j_username и j_password.

Там все нормально работает.

Для пояснения, Мое приложение доступно, например. "www.myapp.com/admin"

Теперь меня попросили добавить еще одно веб-приложение в корень домена, «www.myapp.com», поэтому я добавляю это в свой conf/server.xml:

`<Context 
  docBase="ROOT" 
  path="" 
  reloadable="true" 
/>`

ROOT.war содержит веб-приложение, которое должно находиться в пути домена www.myapp.com/.

Что я пытаюсь сделать, так это добавить механизм j_security_check в этот контекст (это должно быть сделано в AJAX вместо <form> по причинам UX).

Обратите внимание, что мне удалось использовать файлы cookie в обоих контекстах, но когда я делаю вызов www.myapp.com/j_security_check, я всегда получаю ответ 408 Request Timeout.

Как я могу выполнить вызов j_security_check из корневого пути контекста моего приложения? (без внешней страницы входа, пожалуйста)


person Or A.    schedule 02.03.2016    source источник


Ответы (1)


Проблема в том, что вы не следуете правилам аутентификации на основе FORM: вам нужно сначала запросить защищенный ресурс, а затем позволить контейнеру запросить у вас имя пользователя и пароль. После успешной аутентификации контейнер перенаправит вас на изначально запрошенный ресурс. Это описано в разделе 13.6.3 Спецификация сервлета Java версии 3.0. Если вы хотите обрабатывать входы в систему, вам нужно будет сделать это самостоятельно. Сервлет 3.0 имеет методы login для объекта HttpServletRequest, вы можете просто отправлять запросы AJAX своему собственному сервлету, а не j_security_check.

Обратите внимание, что конфигурация <Context> в вашем server.xml вызовет бесконечный хаос и дважды развернет ваше веб-приложение ROOT на одном сервере. Просто поместите ROOT.war в каталог Tomcat webapps/ и дайте ему возможность автоматически развернуться.

person Christopher Schultz    schedule 12.03.2016