Я создаю веб-приложение, использующее 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.
Любая помощь будет оценена.
Если вам нужно отправить 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 на отдельные файлы.