<!--
   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 Java Sentry to secure my runtime application server environment?</h3>

<ol>
    <li>TOMCAT-GLOBAL-SECURITY-NOTES.txt in the root folder for enabling Tomcat global security.</li>
    <li>Fortress Ten Minute Guide (in fortress-core) for enabling Fortress Realm for a single web application 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>



