<!--
   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>
#parse("templates/includes.vtl")
<head>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta name="description" content="Apache Shiro is a powerful and easy-to-use Java security framework that performs authentication, authorization, cryptography, and session management.">
    <meta name="google-site-verification" content="QIax6uT5UX3enoU0G8Pz2pXbQ45KaQuHZ3nCh9V27mw">
    <meta name="google-site-verification" content="ecFap6dWJgS_GCCtxmJQJ_nFYQhM6EgSpBPZDU7xsCE">
    <meta name="msvalidate.01" content="0B57EB46CBFAD8FD45008D2DB6B6C68C">
    <meta name="y_key" content="e47896cd6bae4920">
    <link rel="sitemap" type="application/xml" title="Sitemap" href="/sitemap.xml">

    <title>
    #if ($title)
        #if($title.contains("|"))
            ## The page has a full custom title, render it directly:
            $title
        #else
            ## standard title, append the project name appended for SEO:
            $title | Apache Shiro
        #end
    #else
        ## No title found in the page metadata, set the default:
        Apache Shiro | Simple. Java. Security.
    #end
    </title>


    <link rel="icon" type="image/vnd.microsoft.icon" href="$root/assets/images/favicon.ico">
    <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css">

    <!-- site styles and  -->
    <link rel="stylesheet" type="text/css" href="$root/assets/css/style.css">
    <script type="text/javascript" src="$root/assets/js/shiro-site.js"></script>

    <!-- github ribbon -->
    <link rel="stylesheet" href="$root/assets/css/gh-pages/gh-fork-ribbon.css" />
    <!--[if lt IE 9]>
      <link rel="stylesheet" href="$root/assets/css/gh-pages/gh-fork-ribbon.ie.css" />
    <![endif]-->

    <script src="https://code.jquery.com/jquery-3.1.1.min.js" integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=" crossorigin="anonymous"></script>

    <!-- bootstrap -->
    <link rel="stylesheet" href="$root/assets/bootstrap/css/bootstrap.min.css">
    <link rel="stylesheet" href="$root/assets/bootstrap/css/bootstrap-theme.min.css">
    <script src="$root/assets/bootstrap/js/bootstrap.min.js"></script>

    <link rel="stylesheet" href="$root/assets/css/bootstrap-social.css">

    <!-- Google Analytics -->
    <script>
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
                (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
            m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
    })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

    ga('create', 'UA-XXXXX-Y', 'auto');
    ga('send', 'pageview');
    </script>
    <!-- End Google Analytics -->



    <!-- syntax highlighting -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.7.0/styles/default.min.css" integrity="sha256-Zd1icfZ72UBmsId/mUcagrmN7IN5Qkrvh75ICHIQVTk=" crossorigin="anonymous" />
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.7.0/highlight.min.js" integrity="sha256-s63qpgPYoQk+wv3U6WZqioVJrwFNBTgD4dkeegLuwvo=" crossorigin="anonymous"></script>
    <script>hljs.initHighlightingOnLoad();</script>

    <script type="text/javascript">

        $( document ).ready(function() {
            addPageEditLink();
        });
    </script>
</head>

<body>

    <div id="top-bar"></div>

    <div class="container" style="max-width: 1200px;">

    <a class="github-fork-ribbon right-top" href="https://github.com/apache/shiro" title="Fork me on GitHub">Fork me on GitHub</a>



    <div class="masthead">
        <p class="lead">
            <a href="$root/index.html">
                <img src="$root/assets/images/apache-shiro-logo.png" style="height:100px; width:auto; vertical-align: bottom; margin-top: 20px;">
            </a>
            <span class="tagline">Simple. Java. Security.</span>
            <a class="pull-right" href="https://www.apache.org/events/current-event.html">
                <img style="padding-top: 8px" src="https://www.apache.org/events/current-event-125x125.png"/>
            </a>
        </p>
    </div>



    <nav class="navbar navbar-default" role="navigation">
        <!-- Brand and toggle get grouped for better mobile display -->
        <div class="navbar-header">
            <button type="button" class="navbar-toggle" data-toggle="collapse"
                    data-target="#navbar-collapse-1">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
        </div>

        <!-- Collect the nav links, forms, and other content for toggling -->
        <div class="collapse navbar-collapse" id="navbar-collapse-1">
            <ul class="nav navbar-nav">
                <li><a href="$root/get-started.html">Get Started</a></li>
                <li><a href="$root/documentation.html">Docs</a></li>

                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">
                        Web Apps <b class="caret"></b>
                    </a>

                    <ul class="dropdown-menu">
                        <li><a href="$root/web.html">General</a></li>
##                        <li><a href="$root/jaxrs.html">JAX-RS</a></li>
                        <li class="divider"></li>
                        <li><a href="$root/web-features.html">Features</a></li>
                    </ul>
                </li>

                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">
                        Integrations <b class="caret"></b>
                    </a>

                    <ul class="dropdown-menu">
                        <li><a href="$root/spring.html">Spring</a></li>
                        <li><a href="$root/guice.html">Guice</a></li>
                        <li class="divider"></li>
                        <li><a href="$root/integration.html">Third-Party Integrations</a></li>
                    </ul>
                </li>

                <li><a href="$root/features.html">Features</a></li>

                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">
                        Community <b class="caret"></b>
                    </a>
                    <ul class="dropdown-menu">
                        <li><a href="$root/forums.html">Community Forums</a></li>
                        <li><a href="$root/mailing-lists.html">Mailing Lists</a></li>
                        <li><a href="$root/articles.html">Articles</a></li>
                        <li><a href="$root/news.html">News</a></li>
                        <li><a href="$root/events.html">Events</a></li>
                        <li class="divider"></li>
                        <li><a href="$root/community.html">More</a></li>
                    </ul>
                </li>

                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">
                        About <b class="caret"></b>
                    </a>

                    <ul class="dropdown-menu">
                        <li><a href="$root/about.html">About</a></li>
                        <li><a href="$root/security-reports.html">Vulnerability Reports</a></li>
                    </ul>
                </li>

            </ul>

            <ul class="nav navbar-nav navbar-right">
                <li class="dropdown">
                    <a href="http://www.apache.org/" class="dropdown-toggle" data-toggle="dropdown">
                        Apache Software Foundation <b class="caret"></b></a>
                    <ul class="dropdown-menu">
                        <li><a href="http://www.apache.org/">Apache Homepage</a></li>
                        <li><a href="http://www.apache.org/licenses/">License</a></li>
                        <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
                        <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
                        <li><a href="http://www.apache.org/security/">Security</a></li>
                    </ul>
                </li>
            </ul>
        </div>
        <!-- /.navbar-collapse -->
    </nav>


    #if ($layout)
        #parse($layout)
    #else
        $content
    #end

</div>

    <div class="footer-padding"></div>
    <footer class="custom-footer">

        <div class="col-md-5">
            <div class="copyright-footer">
            <a href="http://www.apache.org/foundation/contributing.html">Donate to the ASF</a> |
            <a href="http://www.apache.org/licenses/LICENSE-2.0.html">License</a>
            <p>Copyright &copy; 2008-$year The Apache Software Foundation</p>
                </div>
        </div>

        <div class="social col-md-2">
            <a class="btn btn-social-icon btn-sm btn-twitter" target="_blank" href="https://twitter.com/ApacheShiro"><span class="fa fa-twitter"></span></a>
            <a class="btn btn-social-icon btn-sm btn-facebook" target="_blank" href="https://www.facebook.com/ApacheShiro"><span class="fa fa-facebook"></span></a>
            <a class="btn btn-social-icon btn-sm btn-linkedin" target="_blank" href="https://www.linkedin.com/groups/4382576"><span class="fa fa-linkedin"></span></a>
        </div>


        <div class="col-md-2"></div>
        <div class="col-md-2 editThisPage">
            <div class="footer-shield"></div>
        </div>

    </footer> <!--END FOOTER-->

</body>
</html>
