Google App Engine - применить ограничение безопасности только к методу POST?

1

Я создаю веб-приложение, использующее GAE в Java. Я столкнулся с проблемой при применении <security-constraint> в web.xml только к методу POST для сервлета.

Вот соответствующая часть моего web.xml

    <security-constraint>
        <web-resource-collection>
            <web-resource-name>data</web-resource-name>
            <url-pattern>/data</url-pattern>
            <http-method>POST</http-method>
        </web-resource-collection>
        <auth-constraint>
            <role-name>admin</role-name>
        </auth-constraint>
    </security-constraint>

Поэтому я хочу обеспечить аутентификацию только при вызове метода POST. Метод GET должен быть разрешен для всех пользователей.

Я протестировал вышеуказанный код, и он отлично работает на сервере разработки localhost. Но когда я фактически развертываю его в App Engine, он не работает. Это требует проверки подлинности даже для метода GET для "данных" Servlet. Всякий раз, когда я пытаюсь использовать метод GET по указанному выше URL-адресу, я получаю ответ от 302 с URL-адресом проверки подлинности в заголовках ответов. Похоже, что GAE применяет ограничение безопасности для методов GET и POST вместо метода POST.

Любая помощь будет оценена.

Теги:
servlets
authentication
google-app-engine
authorization

1 ответ

1
Лучший ответ

Если вам нужно отправить POST в одно и то же приложение Java, добавьте отдельный шаблон URL. т.е. /data1. Затем установите ограничение безопасности на этот шаблон. Я пробовал это, и это сработало:

<servlet-mapping>
    <servlet-name>JavaAppName</servlet-name>
    <url-pattern>/data</url-pattern>
    <url-pattern>/data1</url-pattern>
</servlet-mapping>

      <web-resource-collection>
          <web-resource-name>JavaAppName</web-resource-name>
          <url-pattern>/data1</url-pattern>
          <http-method>POST</http-method>
      </web-resource-collection>
      <auth-constraint>
          <role-name>admin</role-name>
      </auth-constraint>

Просто убедитесь, что обновили HTML POST до нужной цели.

В идеале вы должны разделить GET и POST на отдельные файлы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню