Файл 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