<!--
   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-boot.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>
