Файл
web.xml
, называемый «дескриптор развёртывания» (приложения) — одна из наиболее важных частей Java EE web-приложений.
Настройки безопасности, осуществляемые с помощью этого файла, полностью регулируют поведение веб-контейнера, для которого он назначен. Потому, понимание его основ и главных принципов построения такой защиты необходимое условие для корректной и безопасной работы как самого сервера Tomcat, так и веб-приложений в нём.
Security Constraints
(ограничения безопасности), описываемые в этом файле очень гибкие, и имеют множество вариантов настроек. Далее мы рассмотрим основные элементы конструкции <security-constraint>
.
Для примера — возьмём такой вариант:
<security-constraint> <web-resource-collection> <web-resource-name>All Access</web-resource-name> <url-pattern>/unchecked/*</url-pattern> <http-method>GET</http-method> </web-resource-collection> ...
Основной элемент, который управляет ограничениям — <security-constraint>
. Внутри него описываются остальные необходимые элементы, управляющие ограничениями веб-приложения.
<web-resource-collection>
— внутри элемента описывается ресурс, к которому будут применены ограничения, его имя, расположение, тип аутентификации и/или ограничений доступа.
<web-resource-name>
— имя защищаемого ресурса, не учитывается сервером во время работы, но полезен для удобства настройки и управления, обязательный элемент;
<description>
— необязательный элемент, в котором можно добавить более полное описание ресурса;
<url-pattern>
— путь от корня приложения к файлу и/или каталогу, к которому будут применяться ограничения; можно использовать шаблоны — например, *.jsp
, /unchecked/*
— все URL-ы, начинающиеся с /unchecked
, /Page
— шаблон, срабатывающий только для URL-а /Page
и т.д.
<http-method>
— необязательный элемент, описывающий для каких типов запросов будет применяться ограничение. Допустимые значения: DELETE
, PUT
, HEAD
, GET
, POST
и т.д. Важно — если указан только один тип запросов — это значит, что для всех остальных ограничение применяться не будет. Если не указан ни один — ограничение применяется ко всем типам.
Пример:
<security-constraint> <user-data-constraint> <transport-guarantee>CONFIDENTAL</transport-quarantee> </user-data-constraint> </security-constraint>
Рассмотрим другой пример:
<security-constraint> <display-name>Restricted GET To Employees</display-name> <web-resource-collection> <web-resource-name>Restricted Access - Get Only</web-resource-name> <url-pattern>/restricted/employee/*</url-pattern> <http-method>GET</http-method> </web-resource-collection> <auth-constraint> <role-name>Employee</role-name> </auth-constraint> <user-data-constraint> <transport-guarantee>NONE</transport-guarantee> </user-data-constraint> </security-constraint>
<display-name>
— отображаемое имя для защищаемого ресурса, не работает в Tomcat 4 и 5, необязательный элемент;
<auth-constraint>
— список ролей, пользователи которых будут иметь доступ к ресурсу; если оставить пустым — доступ будет закрыт для всех ( <auth-constraint />
); роли обязательно должны быть перечислены в элементе <security-role>
;
<role-name>
— по одной роли в каждом элементе;
<security-role>
— список ролей пользователей, которые будут использоваться приложением для аутентификации; должен в себе содержать элементы <role-name>
:
<security-role> <role-name>Employee</role-name> </security-role>
<user-data-constraint>
— описывается уровень уровень защиты для ресурса; должен содержать элемент <transport-guarantee>
;
<transport-guarantee>
— содержит указание уровня защиты передачи данных между клиентом и сервером; допустимые значения:
NONE
— значение по-умолчанию — никаких ограничений;
INTEGRAL
— данные должны передаваться способом, который гарантирует, что они не могут быть изменены в процессе передачи, например — с использованием контрольных сумм;
CONFIDENTIAL
— данные должны передаваться способом, который гарантирует, что они не могут быть рассмотрены и/или изменены в процессе передачи (например — SSL);
Пример:
<user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint>
<login-config>
— элемент описывает способы авторизации, а так же — необходимые атрибуты для форм авторизации BASIC
и FORM-based
; может содержать такие элементы внутри: <auth-method>, <form-login-config>, <form-login-page>, <form-error-page>, <realm-name>
.
<auth-method>
— описывает тип авторизации, допустимые типы:
BASIC
— базовая атворизация, через всплывающее окно браузера, авторизация осуществляется через механизм, заданный в элементе <realm-name>;DIGEST
— тоже, что иBASIC
, но данные хешируются на стороне клиента; используемыйRealm
должен быть сконфигурирован с поддержкой алогиртма шифрованияMD5
, пароли должны хранится в виде хешей;FORM
— форма авторизации, через заданную в элементе<form-login-page>
страницу, в случае неудачноя авторизхации — пользователь перенаправляется на страницу, заданную в элементе<form-error-page>
;CLIENT_CERT
— авторизация клиента по SSL-сертифкату.
Примеры:
<login-config> <auth-method>BASIC</auth-method> <realm-name>JDBCRealm</realm-name> </login-config>
<login-config> <auth-method>CLIENT-CERT</auth-method> </login-config>
<login-config> <auth-method>FORM</auth-method> <form-login-config> <form-login-page>/login.html</form-login-page> <form-error-page>/error.html</form-error-page> </form-login-config> </login-config>
Ссылки по теме:
http://java.dzone.com
http://java.dzone.com
http://wiki.metawerx.net
http://twoguysarguing.wordpress.com