Отклонить метод GET на j_security_check - PullRequest
3 голосов
/ 22 июля 2010

Есть ли способ разрешить только запросы POST к j_security_check? Я хочу отказаться от GET. Я использую безопасность на основе форм и хочу разрешить только сообщения j_security_check. Если запрос на вход в систему сделан через GET, запрос должен быть отклонен.

Ответы [ 4 ]

10 голосов
/ 25 сентября 2013

Пытаясь сделать то же самое на сервере JBOSS (Tomcat) из-за проблем безопасности JAAS с использованием методов GET, я пытался разными способами.

  1. Использование ограничения безопасности web.xml в шаблоне URL / j_security_check для использования только POST - это не работает для механизма JAAS, как для обычных сервлетов.

  2. Передача данных для входа со страницы входа в промежуточный сервлет, который проверил метод запроса, и если не GET, то переадресация на j_security_check. - Это не сработало и было слишком сложно.

  3. Создание фильтра, который будет проверять метод запроса и вызывать только сообщение POST для j_security_check. Это не сработало, поскольку JAAS находится глубже в веб-контейнере и вызывается до механизма фильтрации. *

  4. Создание клапана, который вызывается перед JAAS.

Добавив следующее в методе invoke:

HttpServletRequest req = (HttpServletRequest) request;
if (req.getMethod().equals("GET")) {
 log.warn("Someone is trying to use a GET method to login!!");                       
 request.getRequestDispatcher("/login.jsp").forward(req, response);
 throw new ServletException("Using a GET method on security check!");
}

Это работает.

1 голос
/ 23 июля 2010

Да, вы можете отклонить запрос GET. В файле web.xml в разделе ограничений безопасности вы можете указать разрешенные методы http. В следующем XML-коде единственным разрешенным методом для этого ограничения безопасности является метод POST. Проверка j_security разрешит только метод post.

<security-constraint>
  <display-name>Your security constraint</display-name>
  <web-resource-collection>
     <web-resource-name>Your resource name</web-resource-name>
     <url-pattern>/The URL pattern</url-pattern>
     <http-method>POST</http-method>
  <web-resource-collection>
<security-constraint>
0 голосов
/ 22 января 2018

Альтернативный подход, который я рассматриваю для реализации:

  • Блокировка всех запросов, кроме POST, к j_security_check в обратном прокси / loadbalancer, таком как nginx / apache

Например, наВ Apache 2.4 это работает:

<LocationMatch ".*j_security_check">
    AllowMethods POST
</LocationMatch>
  • Если бы мне потребовалась дополнительная настройка, я мог бы переопределить j_security_check своим собственным сервлетом, используя HttpServletRequest.login (...)
0 голосов
/ 26 июля 2010

Вам необходимо перефразировать ваш вопрос.

Проверка j_security обычно используется на странице входа в систему.

Если вы запрашиваете защищенный ресурс и не прошли аутентификацию, вы автоматически перенаправляетесь настраница входа (при условии, что приложение настроено на использование безопасности на основе форм)

Если ваш ресурс не должен подвергаться сомнению для запросов GET, следуйте указаниям Дуга.Например, если вы хотите защитить POST-вызовы от myaccount (шаблон для сервлета), вы будете перенаправлены на страницу входа в систему только после отправки HTTP-сообщения, в то время как запрос GET будет принят даже без аутентификации пользователя.

Подразумевается, что вы хотите разрешить аутентифицированным пользователям доступ к POST-запросу, в то время как GET-запросы разрешены для всех.

...