В документах javax.faces.webapp.FacesServlet
упоминается,
Допустимые методы HTTP
Спецификация JSF требует использования только HTTP-методов GET и POST. Если вашему веб-приложению не требуются какие-либо другие методы http, такие как PUT и DELETE, рассмотрите возможность ограничения допустимых методов http с помощью элементов
<http-method>
и<http-method-omission>
. Дополнительную информацию об использовании этих элементов см. в разделе «Безопасность спецификации сервлета Java».
Мое приложение действительно не зависит от других методов HTTP (кроме GET
и POST
). Поэтому я пытаюсь использовать <http-method>
(или <http-method-omission>
), чтобы исключить все методы, кроме GET
и POST
.
В файле web.xml ограничения безопасности сервлета JAAS настроены следующим образом.
<security-constraint>
<display-name>AdminConstraint</display-name>
<web-resource-collection>
<web-resource-name>ROLE_ADMIN</web-resource-name>
<description/>
<url-pattern>/admin_side/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<description/>
<role-name>ROLE_ADMIN</role-name>
</auth-constraint>
<user-data-constraint>
<description/>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<security-constraint>
<display-name>UserConstraint</display-name>
<web-resource-collection>
<web-resource-name>ROLE_USER</web-resource-name>
<description/>
<url-pattern>/user_side/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<description/>
<role-name>ROLE_USER</role-name>
</auth-constraint>
<user-data-constraint>
<description/>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
Используя эти элементы,
<http-method>GET</http-method>
<http-method>POST</http-method>
Я ожидаю, что все другие методы HTTP запрещены.
Однако GlassFish Server 4.1 регистрирует следующие предупреждения на терминале сервера.
Предупреждение: JACC: для шаблона URL
/user_side/*
были обнаружены все методы, кроме следующих: POST, GET.Предупреждение: JACC: для шаблона URL
/admin_side/*
были обнаружены все методы, кроме следующих: POST, GET
Что это означает?
Кроме того, вместо того, чтобы делать это во всех элементах <security-constraint>
, можно ли это настроить глобально, чтобы его можно было применять ко всем ресурсам в приложении и чтобы все HTTP-запросы, кроме GET
и POST
, можно было опустить, т.е. применить глобально к приложению - возможно, с помощью более обобщенный специализированный шаблон URL, например /*
?
Пример приведен здесь.
<security-constraint> <display-name>WebConstraint</display-name> <web-resource-collection> <web-resource-name>test</web-resource-name> <description/> <url-pattern>/test.jsp</url-pattern> <http-method>POST</http-method> <http-method>HEAD</http-method> <http-method>PUT</http-method> <http-method>OPTIONS</http-method> <http-method>TRACE</http-method> <http-method>DELETE</http-method> </web-resource-collection> <auth-constraint> <description/> <role-name>dev</role-name> </auth-constraint> </security-constraint>
вышеприведенный элемент указывает, что ресурс, на который ссылается шаблон URL /test.jsp, при доступе всеми http-методами, кроме GET , должен быть ограничен для просмотра только аутентифицированными пользователями, принадлежащими к роли dev. Обратите внимание, что ограничение безопасности не применяется к http-методу GET, а только к другим методам (POST, HEAD, PUT и т. д.).
Я нашел последнее предложение в сильном тексте сбивающим с толку. Означает ли это, что при использовании запроса GET
ресурсы, перечисленные в заданном URL-шаблоне, также доступны анонимным пользователям, потому что это означает: " ограничение безопасности не применяется к http-методу GET"?
JAAS security constraints are configured as follows.
- это не ограничения безопасности JAAS, а ограничения безопасности сервлета. - person Arjan Tijms   schedule 15.12.2014