<!--
   Licensed to the Apache Software Foundation (ASF) under one
   or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
   regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
   with the License.  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
-->
<html>
<head>
    <title>Overview of Apache Directory Fortress Realm Component</title>
</head>
<body>
Authentication, Authorization and Audit facility for Java EE application servers.

<h3>How can I start using the Fortress Realm to secure my runtime application server environment?</h3>

<ol>
    <li>README.md in the root folder for installing Fortress Realm.</li>
    <li>README-CONTEXT-SETUP.md in the root folder for Single Web Context in Tomcat.</li>
    <li>README-HOST-SETUP.md in the root folder for Global Security in Tomcat.</li>
</ol>

<h3>How does the Fortress Realm work?</h3>

The Apache Directory Fortress Realm implements the following SPIs:
<ol>
    <li><a href="http://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/realm/RealmBase.html">Tomcat 7</a></li>
</ol>
</body>
</html>



