You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shiro.apache.org by bd...@apache.org on 2016/10/24 14:33:53 UTC

svn commit: r1766414 [1/16] - /shiro/site/publish/

Author: bdemers
Date: Mon Oct 24 14:33:52 2016
New Revision: 1766414

URL: http://svn.apache.org/viewvc?rev=1766414&view=rev
Log:
converted html to md

Modified:
    shiro/site/publish/10-minute-tutorial.html
    shiro/site/publish/about.html
    shiro/site/publish/adoption.html
    shiro/site/publish/architecture.html
    shiro/site/publish/articles.html
    shiro/site/publish/authentication-guide.html
    shiro/site/publish/authentication.html
    shiro/site/publish/authorization.html
    shiro/site/publish/banner.html
    shiro/site/publish/cachemanager.html
    shiro/site/publish/caching.html
    shiro/site/publish/cas.html
    shiro/site/publish/codec.html
    shiro/site/publish/command-line-hasher.html
    shiro/site/publish/commercial-support.html
    shiro/site/publish/configuration.html
    shiro/site/publish/contribute.html
    shiro/site/publish/core.html
    shiro/site/publish/cryptography-features.html
    shiro/site/publish/cryptography.html
    shiro/site/publish/developer-resources.html
    shiro/site/publish/developers.html
    shiro/site/publish/documentation-help-block.html
    shiro/site/publish/documentation.html
    shiro/site/publish/events.html
    shiro/site/publish/features-overview.html
    shiro/site/publish/forums.html
    shiro/site/publish/getting-started-block.html
    shiro/site/publish/graduation-resolution.html
    shiro/site/publish/guice.html
    shiro/site/publish/guides.html
    shiro/site/publish/how-to-contribute.html
    shiro/site/publish/inclusionslibrary.html
    shiro/site/publish/introduction.html
    shiro/site/publish/issues.html
    shiro/site/publish/java-annotations-list.html
    shiro/site/publish/java-annotations.html
    shiro/site/publish/java-authentication-guide.html
    shiro/site/publish/java-authorization-guide.html
    shiro/site/publish/java-cryptography-guide.html
    shiro/site/publish/jsp-tag-library.html
    shiro/site/publish/license.html
    shiro/site/publish/mailing-lists.html
    shiro/site/publish/navigation.html
    shiro/site/publish/overview.html
    shiro/site/publish/permissions.html
    shiro/site/publish/powered-by-shiro.html
    shiro/site/publish/privacy-policy.html
    shiro/site/publish/realm.html
    shiro/site/publish/reference.html
    shiro/site/publish/securitymanager.html
    shiro/site/publish/session-management-features.html
    shiro/site/publish/session-management.html
    shiro/site/publish/sessionmanager.html
    shiro/site/publish/spring.html
    shiro/site/publish/subject.html
    shiro/site/publish/team.html
    shiro/site/publish/terminology.html
    shiro/site/publish/testing.html
    shiro/site/publish/tools.html
    shiro/site/publish/tutorial.html
    shiro/site/publish/version-2-brainstorming.html
    shiro/site/publish/web.html
    shiro/site/publish/what-is-shiro.html
    shiro/site/publish/wiki-todos.html

Modified: shiro/site/publish/10-minute-tutorial.html
URL: http://svn.apache.org/viewvc/shiro/site/publish/10-minute-tutorial.html?rev=1766414&r1=1766413&r2=1766414&view=diff
==============================================================================
--- shiro/site/publish/10-minute-tutorial.html (original)
+++ shiro/site/publish/10-minute-tutorial.html Mon Oct 24 14:33:52 2016
@@ -78,10 +78,7 @@
 
         <div id="content">
 
-            
-
-<h1><a name="10MinuteTutorial-10MinuteTutorialonApacheShiro"></a>10 Minute Tutorial on Apache Shiro</h1>
-
+            <h1><a name="10MinuteTutorial-10MinuteTutorialonApacheShiro"></a>10 Minute Tutorial on Apache Shiro</h1>
 <div class="addthis_toolbox addthis_default_style">
     <a class="addthis_button_compact" href="http://www.addthis.com/bookmark.php?v=250&amp;pubid=ra-4d66ef016022c3bd">Share</a>
     <span class="addthis_separator">|</span>
@@ -92,38 +89,18 @@
 </div>
 <script type="text/javascript">var addthis_config = {"data_track_clickback": true};</script>
 <script type="text/javascript" src="http://s7.addthis.com/js/250/addthis_widget.js#pubid=ra-4d66ef016022c3bd"></script>
-
-
-<h2><a name="10MinuteTutorial-Introduction"></a>Introduction</h2>
-
-<p>Welcome to Apache Shiro's 10 Minute Tutoral! </p>
-
-<p>By going through this quick and simple tutorial you should fully understand how a developer uses Shiro in their
-    application. And you should be able to do it in under 10 minutes.</p>
-
-<h2><a name="10MinuteTutorial-Overview"></a>Overview</h2>
-
+<a name="10MinuteTutorial-Introduction"></a>
+<h2><a href="#introduction" name="introduction">Introduction</a></h2>
+<p>Welcome to Apache Shiro&rsquo;s 10 Minute Tutoral!</p>
+<p>By going through this quick and simple tutorial you should fully understand how a developer uses Shiro in their application. And you should be able to do it in under 10 minutes.</p>
+<a name="10MinuteTutorial-Overview"></a>
+<h2><a href="#overview" name="overview">Overview</a></h2>
 <p>What is Apache Shiro?</p>
-
-<p>Apache Shiro is a powerful and easy to use Java security framework that offers developers an intuitive yet
-    comprehensive solution to authentication, authorization, cryptography, and session management.</p>
-
-<p>In practical terms, it achieves to manage all facets of your application's security, while keeping out of the way as
-    much as possible. It is built on sound interface-driven design and OO principles, enabling custom behavior wherever
-    you can imagine it. But with sensible defaults for everything, it is as "hands off" as application security can be.
-    At least that's what we strive for.</p>
-
+<p>Apache Shiro is a powerful and easy to use Java security framework that offers developers an intuitive yet comprehensive solution to authentication, authorization, cryptography, and session management.</p>
+<p>In practical terms, it achieves to manage all facets of your application&rsquo;s security, while keeping out of the way as much as possible. It is built on sound interface-driven design and OO principles, enabling custom behavior wherever you can imagine it. But with sensible defaults for everything, it is as &ldquo;hands off&rdquo; as application security can be. At least that&rsquo;s what we strive for.</p>
 <p>What can Apache Shiro do?</p>
-
-<p>A lot <img align="middle" class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/smile.png"
-              height="20" width="20" alt="" border="0">. But we don't want to bloat the QuickStart. Please check out our
-    <a href="features.html" title="Features">Features</a> page if you'd like to see what it can do for you. Also, if
-    you're curious on how we got started and why we exist, please see the <a href="what-is-shiro.html"
-                                                                             title="What is Shiro">Shiro History and
-        Mission</a> page.</p>
-
-<p>Ok. Now let's actually do something!</p>
-
+<p>A lot <img src="https://cwiki.apache.org/confluence/images/icons/emoticons/smile.png" />. But we don&rsquo;t want to bloat the QuickStart. Please check out our <a href="features.html" title="Features">Features</a> page if you&rsquo;d like to see what it can do for you. Also, if you&rsquo;re curious on how we got started and why we exist, please see the <a href="what-is-shiro.html" title="What is Shiro">Shiro History and Mission</a> page.</p>
+<p>Ok. Now let&rsquo;s actually do something!</p>
 <div class="panelMacro">
     <table class="infoMacro">
         <colgroup span="1">
@@ -141,167 +118,79 @@
             <td colspan="1" rowspan="1">
                 <b>Note</b>
                 <br clear="none">
-                Shiro can be run in any environment, from the simplest command line application to the biggest enterprise web and clustered applications, but we'll use the simplest possible example in a simple <tt>main</tt> method for this QuickStart so you can get a feel for the API.
+                Shiro can be run in any environment, from the simplest command line application to the biggest enterprise web and clustered applications, but we'll use the simplest possible example in a simple `main` method for this QuickStart so you can get a feel for the API.
             </td>
         </tr>
         </tbody>
     </table>
 </div>
-
-<h2><a name="10MinuteTutorial-Download"></a>Download</h2>
-
+<a name="10MinuteTutorial-Download"></a>
+<h2><a href="#download" name="download">Download</a></h2>
 <ol>
-    <li>Ensure you have JDK 1.6+ and Maven 3.0.3+ installed.</li>
-    <li>Download the lastest "Source Code Distribution" from the <a href="download.html" title="Download">Download</a>
-        page. In this example, we're using the 1.3.2 release distribution.
-    </li>
-    <li>Unzip the source package:
-        <div class="code panel" style="border-width: 1px;">
-            <div class="codeContent panelContent">
-<pre class="code-java">
-&gt; unzip shiro-root-1.3.2-source-release.zip
-</pre>
-            </div>
-        </div>
-    </li>
-    <li>Enter the quickstart directory:
-        <div class="code panel" style="border-width: 1px;">
-            <div class="codeContent panelContent">
-<pre class="code-java">
-&gt; cd shiro-root-1.3.2/samples/quickstart
-</pre>
-            </div>
-        </div>
-    </li>
-    <li>Run the QuickStart:
-        <div class="code panel" style="border-width: 1px;">
-            <div class="codeContent panelContent">
-<pre class="code-java">
-&gt; mvn compile exec:java
-</pre>
-            </div>
-        </div>
-        <p>This target will just print out some log messages to let you know what is going on and then exit. While
-            reading this quickstart, feel free to look at the code found under <tt>samples/quickstart/src/main/java/Quickstart.java</tt>.
-            Change that file and run the above <tt>mvn compile exec:java</tt> command as often as you like.</p></li>
+  <li>Ensure you have JDK 1.6+ and Maven 3.0.3+ installed.</li>
+  <li>Download the lastest &ldquo;Source Code Distribution&rdquo; from the <a href="download.html" title="Download">Download</a> page. In this example, we&rsquo;re using the 1.3.2 release distribution.</li>
+  <li>Unzip the source package:
+    <pre><code class="bash">$ unzip shiro-root-1.3.2-source-release.zip
+</code></pre>
+  </li>
+  <li>
+    <p>Enter the quickstart directory:</p>
+    <pre><code class="bash">$ cd shiro-root-1.3.2/samples/quickstart
+</code></pre>
+  </li>
+  <li>
+    <p>Run the QuickStart:</p>
+    <pre><code class="bash">$ mvn compile exec:java
+</code></pre>
+  </li>
 </ol>
-
-
-<h2><a name="10MinuteTutorial-Quickstart.java"></a>Quickstart.java</h2>
-
-<p>The <tt>Quickstart.java</tt> file referenced above contains all the code that will get you familiar with the API. Now
-    lets break it down in chunks here so you can easily understand what is going on.</p>
-
+<p>This target will just print out some log messages to let you know what is going on and then exit. While reading this quickstart, feel free to look at the code found under <code>samples/quickstart/src/main/java/Quickstart.java</code>. Change that file and run the above <code>mvn compile exec:java</code> command as often as you like.</p>
+<a name="10MinuteTutorial-Quickstart.java"></a>
+<h2>Quickstart.java</h2>
+<p>The <code>Quickstart.java</code> file referenced above contains all the code that will get you familiar with the API. Now lets break it down in chunks here so you can easily understand what is going on.</p>
 <p>In almost all environments, you can obtain the currently executing user via the following call:</p>
-
-<p></p>
-
-<div class="code panel" style="border-width: 1px;">
-    <div class="codeContent panelContent">
-<pre class="code-java">
-Subject currentUser = SecurityUtils.getSubject();
-</pre>
-    </div>
-</div>
-
-<p>Using <tt><a class="external-link"
-                href="static/current/apidocs/org/apache/shiro/SecurityUtils.html">SecurityUtils</a>.<a
-        class="external-link" href="static/current/apidocs/org/apache/shiro/SecurityUtils.html#getSubject()">getSubject()</a></tt>,
-    we can obtain the currently executing <tt><a class="external-link"
-                                                 href="static/current/apidocs/org/apache/shiro/subject/Subject.html">Subject</a></tt>.
-    A <em>Subject</em> is just a security-specific "view" of an application User. We actually wanted to call it 'User'
-    since that "just makes sense", but we decided against it: too many applications have existing APIs that already have
-    their own User classes/frameworks, and we didn't want to conflict with those. Also, in the security world, the term
-    <tt>Subject</tt> is actually the recognized nomenclature. Ok, moving on...</p>
-
-<p>The <tt>getSubject()</tt> call in a standalone application might return a <tt>Subject</tt> based on user data in an
-    application-specific location, and in a server environment (e.g. web app), it acquires the <tt>Subject</tt> based on
-    user data associated with current thread or incoming request.</p>
-
-<p>Now that you have a <tt>Subject</tt>, what can you do with it?</p>
-
-<p>If you want to make things available to the user during their current session with the application, you can get their
-    session:</p>
-
-<p></p>
-
-<div class="code panel" style="border-width: 1px;">
-    <div class="codeContent panelContent">
-<pre class="code-java">
-Session session = currentUser.getSession();
-session.setAttribute( <span class="code-quote">"someKey"</span>, <span class="code-quote">"aValue"</span> );
-</pre>
-    </div>
-</div>
-
-<p>The <tt>Session</tt> is a Shiro-specific instance that provides most of what you're used to with regular HttpSessions
-    but with some extra goodies and one <b>big</b> difference: it does not require an HTTP environment!</p>
-
-<p>If deploying inside a web application, by default the <tt>Session</tt> will be <tt>HttpSession</tt> based. But, in a
-    non-web environment, like this simple Quickstart, Shiro will automatically use its Enterprise Session Management by
-    default. This means you get to use the same API in your applications, in any tier, regardless of deployment
-    environment. This opens a whole new world of applications since any application requiring sessions does not need to
-    be forced to use the <tt>HttpSession</tt> or EJB Stateful Session Beans. And, any client technology can now share
-    session data.</p>
-
-<p>So now you can acquire a <tt>Subject</tt> and their <tt>Session</tt>. What about the <em>really</em> useful stuff
-    like checking if they are allowed to do things, like checking against roles and permissions?</p>
-
-<p>Well, we can only do those checks for a known user. Our <tt>Subject</tt> instance above represents the current user,
-    but <em>who</em> is the current user? Well, they're anonymous - that is, until they log in at least once. So, let's
-    do that:</p>
-
-<div class="code panel" style="border-width: 1px;">
-    <div class="codeContent panelContent">
-<pre class="code-java">
-<span class="code-keyword">if</span> ( !currentUser.isAuthenticated() ) {
-    <span class="code-comment">//collect user principals and credentials in a gui specific manner 
-</span>    <span class="code-comment">//such as username/password html form, X509 certificate, OpenID, etc.
-</span>    <span class="code-comment">//We'll use the username/password example here since it is the most common.
-</span>    <span class="code-comment">//(<span class="code-keyword">do</span> you know what movie <span
-        class="code-keyword">this</span> is from? ;)
-</span>    UsernamePasswordToken token = <span class="code-keyword">new</span> UsernamePasswordToken(<span
-        class="code-quote">"lonestarr"</span>, <span class="code-quote">"vespa"</span>);
-    <span class="code-comment">//<span class="code-keyword">this</span> is all you have to <span
-            class="code-keyword">do</span> to support 'remember me' (no config - built in!):
-</span>    token.setRememberMe(<span class="code-keyword">true</span>);
+<pre><code class="java">Subject currentUser = SecurityUtils.getSubject();
+</code></pre>
+<p>Using <a href="static/current/apidocs/org/apache/shiro/SecurityUtils.html"><code>SecurityUtils</code></a>.[getSubject()](static/current/apidocs/org/apache/shiro/SecurityUtils.html#getSubject()), we can obtain the currently executing <a href="static/current/apidocs/org/apache/shiro/subject/Subject.html"><code>Subject</code></a>. A <em>Subject</em> is just a security-specific &ldquo;view&rdquo; of an application User. We actually wanted to call it &lsquo;User&rsquo; since that &ldquo;just makes sense&rdquo;, but we decided against it: too many applications have existing APIs that already have their own User classes/frameworks, and we didn&rsquo;t want to conflict with those. Also, in the security world, the term <code>Subject</code> is actually the recognized nomenclature. Ok, moving on&hellip;</p>
+<p>The <code>getSubject()</code> call in a standalone application might return a <code>Subject</code> based on user data in an application-specific location, and in a server environment (e.g. web app), it acquires the <code>Subject</code> based on user data associated with current thread or incoming request.</p>
+<p>Now that you have a <code>Subject</code>, what can you do with it?</p>
+<p>If you want to make things available to the user during their current session with the application, you can get their session:</p>
+<pre><code class="java">Session session = currentUser.getSession();
+session.setAttribute( &quot;someKey&quot;, &quot;aValue&quot; );
+</code></pre>
+<p>The <code>Session</code> is a Shiro-specific instance that provides most of what you&rsquo;re used to with regular HttpSessions but with some extra goodies and one <strong>big</strong> difference: it does not require an HTTP environment!</p>
+<p>If deploying inside a web application, by default the <code>Session</code> will be <code>HttpSession</code> based. But, in a non-web environment, like this simple Quickstart, Shiro will automatically use its Enterprise Session Management by default. This means you get to use the same API in your applications, in any tier, regardless of deployment environment. This opens a whole new world of applications since any application requiring sessions does not need to be forced to use the <code>HttpSession</code> or EJB Stateful Session Beans. And, any client technology can now share session data.</p>
+<p>So now you can acquire a <code>Subject</code> and their <code>Session</code>. What about the <em>really</em> useful stuff like checking if they are allowed to do things, like checking against roles and permissions?</p>
+<p>Well, we can only do those checks for a known user. Our <code>Subject</code> instance above represents the current user, but <em>who</em> is the current user? Well, they&rsquo;re anonymous - that is, until they log in at least once. So, let&rsquo;s do that:</p>
+<pre><code class="java">if ( !currentUser.isAuthenticated() ) {
+    //collect user principals and credentials in a gui specific manner
+    //such as username/password html form, X509 certificate, OpenID, etc.
+    //We&#39;ll use the username/password example here since it is the most common.
+    //(do you know what movie this is from? ;)
+    UsernamePasswordToken token = new UsernamePasswordToken(&quot;lonestarr&quot;, &quot;vespa&quot;);
+    //this is all you have to do to support &#39;remember me&#39; (no config - built in!):
+    token.setRememberMe(true);
     currentUser.login(token);
 }
-</pre>
-    </div>
-</div>
-
-<p>That's it! It couldn't be easier.</p>
-
-<p>But what if their login attempt fails? You can catch all sorts of specific exceptions that tell you exactly what
-    happened and allows you to handle and react accordingly:</p>
-
-<div class="code panel" style="border-width: 1px;">
-    <div class="codeContent panelContent">
-<pre class="code-java">
-<span class="code-keyword">try</span> {
+</code></pre>
+<p>That&rsquo;s it! It couldn&rsquo;t be easier.</p>
+<p>But what if their login attempt fails? You can catch all sorts of specific exceptions that tell you exactly what happened and allows you to handle and react accordingly:</p>
+<pre><code class="java">try {
     currentUser.login( token );
-    <span class="code-comment">//<span class="code-keyword">if</span> no exception, that's it, we're done!
-</span>} <span class="code-keyword">catch</span> ( UnknownAccountException uae ) {
-    <span class="code-comment">//username wasn't in the system, show them an error message?
-</span>} <span class="code-keyword">catch</span> ( IncorrectCredentialsException ice ) {
-    <span class="code-comment">//password didn't match, <span class="code-keyword">try</span> again?
-</span>} <span class="code-keyword">catch</span> ( LockedAccountException lae ) {
-    <span class="code-comment">//account <span class="code-keyword">for</span> that username is locked - can't login.  Show them a message?
-</span>} 
-    ... more types exceptions to check <span class="code-keyword">if</span> you want ...
-} <span class="code-keyword">catch</span> ( AuthenticationException ae ) {
-    <span class="code-comment">//unexpected condition - error?
-</span>}
-</pre>
-    </div>
-</div>
-
-<p>There are many different types of exceptions you can check, or throw your own for custom conditions Shiro might not
-    account for. See the <a class="external-link"
-                            href="static/current/apidocs/org/apache/shiro/authc/AuthenticationException.html">AuthenticationException
-        JavaDoc</a> for more. </p>
-
+    //if no exception, that&#39;s it, we&#39;re done!
+} catch ( UnknownAccountException uae ) {
+    //username wasn&#39;t in the system, show them an error message?
+} catch ( IncorrectCredentialsException ice ) {
+    //password didn&#39;t match, try again?
+} catch ( LockedAccountException lae ) {
+    //account for that username is locked - can&#39;t login.  Show them a message?
+}
+    ... more types exceptions to check if you want ...
+} catch ( AuthenticationException ae ) {
+    //unexpected condition - error?
+}
+</code></pre>
+<p>There are many different types of exceptions you can check, or throw your own for custom conditions Shiro might not account for. See the <a href="static/current/apidocs/org/apache/shiro/authc/AuthenticationException.html">AuthenticationException JavaDoc</a> for more.</p>
 <div class="panelMacro">
     <table class="tipMacro">
         <colgroup span="1">
@@ -321,109 +210,41 @@ session.setAttribute( <span class="code-
         </tbody>
     </table>
 </div>
-
 <p>Ok, so by now, we have a logged in user. What else can we do?</p>
-
-<p>Let's say who they are:</p>
-
-<p></p>
-
-<div class="code panel" style="border-width: 1px;">
-    <div class="codeContent panelContent">
-<pre class="code-java">
-<span class="code-comment">//print their identifying principal (in <span class="code-keyword">this</span> <span
-        class="code-keyword">case</span>, a username):
-</span>log.info( <span class="code-quote">"User ["</span> + currentUser.getPrincipal() + <span class="code-quote">"] logged in successfully."</span> );
-</pre>
-    </div>
-</div>
-
+<p>Let&rsquo;s say who they are:</p>
+<pre><code class="java">//print their identifying principal (in this case, a username): 
+log.info( &quot;User [&quot; + currentUser.getPrincipal() + &quot;] logged in successfully.&quot; );
+</code></pre>
 <p>We can also test to see if they have specific role or not:</p>
-
-<p></p>
-
-<div class="code panel" style="border-width: 1px;">
-    <div class="codeContent panelContent">
-<pre class="code-java">
-<span class="code-keyword">if</span> ( currentUser.hasRole( <span class="code-quote">"schwartz"</span> ) ) {
-    log.info(<span class="code-quote">"May the Schwartz be with you!"</span> );
-} <span class="code-keyword">else</span> {
-    log.info( <span class="code-quote">"Hello, mere mortal."</span> );
+<pre><code class="java">if ( currentUser.hasRole( &quot;schwartz&quot; ) ) {
+    log.info(&quot;May the Schwartz be with you!&quot; );
+} else {
+    log.info( &quot;Hello, mere mortal.&quot; );
 }
-</pre>
-    </div>
-</div>
-
+</code></pre>
 <p>We can also see if they have a permission to act on a certain type of entity:</p>
-
-<p></p>
-
-<div class="code panel" style="border-width: 1px;">
-    <div class="codeContent panelContent">
-<pre class="code-java">
-<span class="code-keyword">if</span> ( currentUser.isPermitted( <span class="code-quote">"lightsaber:weild"</span> ) ) {
-    log.info(<span class="code-quote">"You may use a lightsaber ring.  Use it wisely."</span>);
-} <span class="code-keyword">else</span> {
-    log.info(<span class="code-quote">"Sorry, lightsaber rings are <span class="code-keyword">for</span> schwartz masters only."</span>);
+<pre><code class="java">if ( currentUser.isPermitted( &quot;lightsaber:weild&quot; ) ) {
+    log.info(&quot;You may use a lightsaber ring.  Use it wisely.&quot;);
+} else {
+    log.info(&quot;Sorry, lightsaber rings are for schwartz masters only.&quot;);
 }
-</pre>
-    </div>
-</div>
-
-<p>Also, we can perform an extremely powerful <em>instance-level</em> permission check - the ability to see if the user
-    has the ability to access a specific instance of a type:</p>
-
-<p></p>
-
-<div class="code panel" style="border-width: 1px;">
-    <div class="codeContent panelContent">
-<pre class="code-java">
-<span class="code-keyword">if</span> ( currentUser.isPermitted( <span class="code-quote">"winnebago:drive:eagle5"</span> ) ) {
-    log.info(<span
-        class="code-quote">"You are permitted to 'drive' the 'winnebago' with license plate (id) 'eagle5'.  "</span> +
-                <span class="code-quote">"Here are the keys - have fun!"</span>);
-} <span class="code-keyword">else</span> {
-    log.info(<span class="code-quote">"Sorry, you aren't allowed to drive the 'eagle5' winnebago!"</span>);
+</code></pre>
+<p>Also, we can perform an extremely powerful <em>instance-level</em> permission check - the ability to see if the user has the ability to access a specific instance of a type:</p>
+<pre><code class="java">if ( currentUser.isPermitted( &quot;winnebago:drive:eagle5&quot; ) ) {
+    log.info(&quot;You are permitted to &#39;drive&#39; the &#39;winnebago&#39; with license plate (id) &#39;eagle5&#39;.  &quot; +
+                &quot;Here are the keys - have fun!&quot;);
+} else {
+    log.info(&quot;Sorry, you aren&#39;t allowed to drive the &#39;eagle5&#39; winnebago!&quot;);
 }
-</pre>
-    </div>
-</div>
-
+</code></pre>
 <p>Piece of cake, right?</p>
-
 <p>Finally, when the user is done using the application, they can log out:</p>
-
-<p></p>
-
-<div class="code panel" style="border-width: 1px;">
-    <div class="codeContent panelContent">
-<pre class="code-java">
-currentUser.logout(); <span class="code-comment">//removes all identifying information and invalidates their session too.</span>
-</pre>
-    </div>
-</div>
-
-<p>Well, that's the core to using Apache Shiro at the application-developer level. And although there is some pretty
-    sophisticated stuff going on under the hood to make this work so elegantly, that's really all there is to it.</p>
-
-<p>But you might ask yourself, "But who is responsible for getting the user data during a login (usernames and
-    passwords, role and permissions, etc), and who actually performs those security checks during runtime?" Well, you
-    do, by implementing what Shiro calls a <a href="realm.html" title="Realm">Realm</a> and plugging that <tt>Realm</tt>
-    into Shiro's configuration. </p>
-
-<p>However, how you configure a <a href="realm.html" title="Realm">Realm</a> is largely dependent upon your runtime
-    environment. For example, if you run a standalone application, or if you have a web based application, or a Spring
-    or JEE container-based application, or combination thereof. That type of configuration is outside the scope of this
-    QuickStart, since its aim is to get you comfortable with the API and Shiro's concepts.</p>
-
-<p>When you're ready to jump in with a little more detail, you'll definitely want to read the <a
-        href="java-authentication-guide.html" title="Java Authentication Guide">Authentication Guide</a> and <a
-        href="java-authorization-guide.html" title="Java Authorization Guide">Authorization Guide</a>. Then can move
-    onto other <a href="documentation.html" title="Documentation">Documentation</a>, in particularly the <a
-            href="reference.html" title="Reference">Reference Manual</a>, to answer any other questions. You'll also
-    probably want to join the user <a href="mailing-lists.html" title="Mailing Lists">mailing list</a> - you'll find
-    that we have a great community with people willing to help whenever possible.</p>
-
+<pre><code class="java">currentUser.logout(); //removes all identifying information and invalidates their session too.
+</code></pre>
+<p>Well, that&rsquo;s the core to using Apache Shiro at the application-developer level. And although there is some pretty sophisticated stuff going on under the hood to make this work so elegantly, that&rsquo;s really all there is to it.</p>
+<p>But you might ask yourself, &ldquo;But who is responsible for getting the user data during a login (usernames and passwords, role and permissions, etc), and who actually performs those security checks during runtime?&rdquo; Well, you do, by implementing what Shiro calls a <a href="realm.html" title="Realm">Realm</a> and plugging that <code>Realm</code> into Shiro&rsquo;s configuration.</p>
+<p>However, how you configure a <a href="realm.html" title="Realm">Realm</a> is largely dependent upon your runtime environment. For example, if you run a standalone application, or if you have a web based application, or a Spring or JEE container-based application, or combination thereof. That type of configuration is outside the scope of this QuickStart, since its aim is to get you comfortable with the API and Shiro&rsquo;s concepts.</p>
+<p>When you&rsquo;re ready to jump in with a little more detail, you&rsquo;ll definitely want to read the <a href="java-authentication-guide.html" title="Java Authentication Guide">Authentication Guide</a> and <a href="java-authorization-guide.html" title="Java Authorization Guide">Authorization Guide</a>. Then can move onto other <a href="documentation.html" title="Documentation">Documentation</a>, in particularly the <a href="reference.html" title="Reference">Reference Manual</a>, to answer any other questions. You&rsquo;ll also probably want to join the user <a href="mailing-lists.html" title="Mailing Lists">mailing list</a> - you&rsquo;ll find that we have a great community with people willing to help whenever possible.</p>
 <p>Thanks for following along. We hope you enjoy using Apache Shiro!</p>
 
         </div>

Modified: shiro/site/publish/about.html
URL: http://svn.apache.org/viewvc/shiro/site/publish/about.html?rev=1766414&r1=1766413&r2=1766414&view=diff
==============================================================================
--- shiro/site/publish/about.html (original)
+++ shiro/site/publish/about.html Mon Oct 24 14:33:52 2016
@@ -78,46 +78,23 @@
 
         <div id="content">
 
-            <h1><a name="About-AboutApacheShiro"></a>About Apache Shiro</h1>
-
-<p>Apache Shiro is is a top level open source project under the <a class="external-link" href="http://www.apache.org">Apache
-    Software Foundation</a>. As a project, Shiro is an application security framework that provides application
-    developers very clean and simple ways of supporting four cornerstones of security in their applications:
-    authentication, authorization, enterprise session management and cryptography. </p>
-
-<p>If you'd like to learn more about Shiro please visit the links below</p>
-
-<ul class="alternate">
-    <li><b><a href="what-is-shiro.html" title="What is Shiro">What is Shiro</a></b> - A deeper look into the project,
-        its mission, and its history
-    </li>
-</ul>
-
-
-<ul class="alternate">
-    <li><b><a href="features.html" title="Features">Features</a></b> - Explore the major features of the project</li>
-</ul>
-
-
-<ul class="alternate">
-    <li><b><a href="news.html" title="News">News</a></b> - Stay up to date on the latest Apache Shiro news</li>
-</ul>
-
-
-<ul class="alternate">
-    <li><b><a href="events.html" title="Events">Events</a></b> - See what Apache Shiro events are coming that you should
-        consider attending
-    </li>
+            <a name="About-AboutApacheShiro"></a>
+<h1><a href="#about-apache-shiro" name="about-apache-shiro">About Apache Shiro</a></h1>
+<p>Apache Shiro is is a top level open source project under the <a href="http://www.apache.org">Apache Software Foundation</a>. As a project, Shiro is an application security framework that provides application developers very clean and simple ways of supporting four cornerstones of security in their applications: authentication, authorization, enterprise session management and cryptography.</p>
+<p>If you&rsquo;d like to learn more about Shiro please visit the links below</p>
+<ul>
+  <li>
+  <p><a href="what-is-shiro.html">What is Shiro</a> - A deeper look into the project, its mission, and its history</p></li>
+  <li>
+  <p><a href="features.html">Features</a> - Explore the major features of the project</p></li>
+  <li>
+  <p><a href="news.html">News</a> - Stay up to date on the latest Apache Shiro news</p></li>
+  <li>
+  <p><a href="events.html">Events</a> - See what Apache Shiro events are coming that you should consider attending</p></li>
+  <li>
+  <p><a href="license.html">License</a> - Review the license under which Shiro is released - Apache Software License, Version 2.0</p></li>
 </ul>
 
-
-<ul class="alternate">
-    <li><b><a href="license.html" title="License">License</a></b> - Review the license under which Shiro is released--
-        Apache Software License, Version 2.0
-    </li>
-</ul>
-
-
         </div>
 
     </div><!--END WRAPPER-->

Modified: shiro/site/publish/adoption.html
URL: http://svn.apache.org/viewvc/shiro/site/publish/adoption.html?rev=1766414&r1=1766413&r2=1766414&view=diff
==============================================================================
--- shiro/site/publish/adoption.html (original)
+++ shiro/site/publish/adoption.html Mon Oct 24 14:33:52 2016
@@ -78,10 +78,9 @@
 
         <div id="content">
 
-            <h1><a name="Adoption-ApacheShiroAdoption"></a>Apache Shiro Adoption</h1>
-
+            <a name="Adoption-ApacheShiroAdoption"></a>
+<h1><a href="#apache-shiro-adoption" name="apache-shiro-adoption">Apache Shiro Adoption</a></h1>
 <p>Are you using Shiro to build an application? List your name and company here and let the world know!</p>
-
 <p>The more people that adopt Shiro, the better it becomes, and the more you benefit from it. Help adoption by letting others know how you use it.</p>
 
         </div>

Modified: shiro/site/publish/architecture.html
URL: http://svn.apache.org/viewvc/shiro/site/publish/architecture.html?rev=1766414&r1=1766413&r2=1766414&view=diff
==============================================================================
--- shiro/site/publish/architecture.html (original)
+++ shiro/site/publish/architecture.html Mon Oct 24 14:33:52 2016
@@ -78,109 +78,85 @@
 
         <div id="content">
 
-            <h1><a name="Architecture-ApacheShiroArchitecture"></a>Apache Shiro Architecture</h1>
-
-<p>Apache Shiro's design goals are to simplify application security by being intuitive and easy to use.  Shiro's core design models how most people think about application security - in the context of someone (or something) interacting with an application.</p>
-
-<p>Software applications are usually designed based on user stories.  That is, you'll often design user interfaces or service APIs based on how a user would (or should) interact with the software.  For example, you might say, "If the user interacting with my application is logged in, I will show them a button they can click to view their account information.  If they are not logged in, I will show a sign-up button."  </p>
-
-<p>This example statement indicates that applications are largely written to satisfy user requirements and needs.  Even if the 'user' is another software system and not a human being, you still write code to reflect behavior based on who (or what) is currently interacting with your software.</p>
-
+            <a name="Architecture-ApacheShiroArchitecture"></a>
+<h1><a href="#apache-shiro-architecture" name="apache-shiro-architecture">Apache Shiro Architecture</a></h1>
+<p>Apache Shiro&rsquo;s design goals are to simplify application security by being intuitive and easy to use. Shiro&rsquo;s core design models how most people think about application security - in the context of someone (or something) interacting with an application.</p>
+<p>Software applications are usually designed based on user stories. That is, you&rsquo;ll often design user interfaces or service APIs based on how a user would (or should) interact with the software. For example, you might say, &ldquo;If the user interacting with my application is logged in, I will show them a button they can click to view their account information. If they are not logged in, I will show a sign-up button.&rdquo;</p>
+<p>This example statement indicates that applications are largely written to satisfy user requirements and needs. Even if the &lsquo;user&rsquo; is another software system and not a human being, you still write code to reflect behavior based on who (or what) is currently interacting with your software.</p>
 <p>Shiro reflects these concepts in its own design. By matching what is already intuitive for software developers, Apache Shiro remains intuitive and easy to use in practically any application.</p>
-
-<h2><a name="Architecture-HighLevelOverview"></a>High-Level Overview</h2>
-
-<p>At the highest conceptual level, Shiro's architecture has 3 primary concepts: the <tt>Subject</tt>, <tt>SecurityManager</tt> and <tt>Realms</tt>.  The following diagram is a high-level overview of how these components interact, and we'll cover each concept below:</p>
-
-<p><br clear="none" class="atl-forced-newline">
-<br clear="none" class="atl-forced-newline">
-<span class="image-wrap" style="display: block; text-align: center"><img src="assets/images/ShiroBasicArchitecture.png" style="border: 0px solid black"></span>
-<br clear="none" class="atl-forced-newline">
-<br clear="none" class="atl-forced-newline"></p>
-
-<ul><li><b>Subject</b>: As we've mentioned in our <a href="tutorial.html" title="Tutorial">Tutorial</a>, the <tt>Subject</tt> is essentially a security specific 'view' of the the currently executing user.  Whereas the word 'User' often implies a human being, a <tt>Subject</tt> can be a person, but it could also represent a 3rd-party service, daemon account, cron job, or anything similar - basically anything that is currently interacting with the software.
-<br clear="none" class="atl-forced-newline">
-<br clear="none" class="atl-forced-newline">
-<tt>Subject</tt> instances are all bound to (and require) a <tt>SecurityManager</tt>.  When you interact with a <tt>Subject</tt>, those interactions translate to subject-specific interactions with the <tt>SecurityManager</tt>.
-<br clear="none" class="atl-forced-newline">
-<br clear="none" class="atl-forced-newline"></li><li><b>SecurityManager</b>: The <tt>SecurityManager</tt> is the heart of Shiro&#8217;s architecture and acts as a sort of 'umbrella&#8217; object that coordinates its internal security components that together form an object graph. However, once the SecurityManager and its internal object graph is configured for an application, it is usually left alone and application developers spend almost all of their time with the <tt>Subject</tt> API.
-<br clear="none" class="atl-forced-newline">
-<br clear="none" class="atl-forced-newline">
-We will talk about the <tt>SecurityManager</tt> in detail later on, but it is important to realize that when you interact with a <tt>Subject</tt>, it is really the <tt>SecurityManager</tt> behind the scenes that does all the heavy lifting for any <tt>Subject</tt> security operation.  This is reflected in the basic flow diagram above.
-<br clear="none" class="atl-forced-newline">
-<br clear="none" class="atl-forced-newline"></li><li><b>Realms</b>:  Realms act as the &#8216;bridge&#8217; or &#8216;connector&#8217; between Shiro and your application&#8217;s security data. When it comes time to actually interact with security-related data like user accounts to perform authentication (login) and authorization (access control), Shiro looks up many of these things from one or more Realms configured for an application.
-<br clear="none" class="atl-forced-newline">
-<br clear="none" class="atl-forced-newline">
-In this sense a Realm is essentially a security-specific <a class="external-link" href="https://en.wikipedia.org/wiki/Data_access_object" rel="nofollow">DAO</a>: it encapsulates connection details for data sources and makes the associated data available to Shiro as needed. When configuring Shiro, you must specify at least one Realm to use for authentication and/or authorization. The <tt>SecurityManager</tt> may be configured with multiple Realms, but at least one is required.
-<br clear="none" class="atl-forced-newline">
-<br clear="none" class="atl-forced-newline">
-Shiro provides out-of-the-box Realms to connect to a number of security data sources (aka directories) such as LDAP, relational databases (JDBC), text configuration sources like INI and properties files, and more. You can plug-in your own Realm implementations to represent custom data sources if the default Realms do not meet your needs.
-<br clear="none" class="atl-forced-newline">
-<br clear="none" class="atl-forced-newline">
-Like other internal components, the Shiro <tt>SecurityManager</tt> manages how Realms are used to acquire security and identity data to be represented as <tt>Subject</tt> instances.</li></ul>
-
-
-<h2><a name="Architecture-DetailedArchitecture"></a>Detailed Architecture</h2>
-
-<p>The following diagram shows Shiro's core architectural concepts followed by short summaries of each:</p>
-
-<p><span class="image-wrap" style="display: block; text-align: center"><img src="assets/images/ShiroArchitecture.png" style="border: 0px solid black"></span></p>
-
-<ul><li><b>Subject</b> (<tt><a class="external-link" href="static/current/apidocs/org/apache/shiro/subject/Subject.html">org.apache.shiro.subject.Subject</a></tt>)<br clear="none">
-A security-specific 'view' of the entity (user, 3rd-party service, cron job, etc) currently interacting with the software.
-<br clear="none" class="atl-forced-newline">
-<br clear="none" class="atl-forced-newline"></li><li><b>SecurityManager</b> (<tt><a class="external-link" href="static/current/apidocs/org/apache/shiro/mgt/SecurityManager.html">org.apache.shiro.mgt.SecurityManager</a></tt>)<br clear="none">
-As mentioned above, the <tt>SecurityManager</tt> is the heart of Shiro's architecture.  It is mostly an 'umbrella' object that coordinates its managed components to ensure they work smoothly together.  It also manages Shiro's view of every application user, so it knows how to perform security operations per user.
-<br clear="none" class="atl-forced-newline">
-<br clear="none" class="atl-forced-newline"></li><li><b>Authenticator</b> (<tt><a class="external-link" href="static/current/apidocs/org/apache/shiro/authc/Authenticator.html">org.apache.shiro.authc.Authenticator</a></tt>)<br clear="none">
-The <tt>Authenticator</tt> is the component that is responsible for executing and reacting to authentication (log-in) attempts by users.  When a user tries to log-in, that logic is executed by the <tt>Authenticator</tt>.  The <tt>Authenticator</tt> knows how to coordinate with one or more <tt>Realms</tt> that store relevant user/account information.  The data obtained from these <tt>Realms</tt> is used to verify the user's identity to guarantee the user really is who they say they are.
-<br clear="none" class="atl-forced-newline">
-<br clear="none" class="atl-forced-newline">
-	<ul><li><b>Authentication Strategy</b> (<tt><a class="external-link" href="static/current/apidocs/org/apache/shiro/authc/pam/AuthenticationStrategy.html">org.apache.shiro.authc.pam.AuthenticationStrategy</a></tt>)<br clear="none">
-If more than one <tt>Realm</tt> is configured, the <tt>AuthenticationStrategy</tt> will coordinate the Realms to determine the conditions under which an authentication attempt succeeds or fails (for example, if one realm succeeds but others fail, is the attempt successful? Must all realms succeed? Only the first?).
-<br clear="none" class="atl-forced-newline">
-<br clear="none" class="atl-forced-newline"></li></ul>
-	</li><li><b>Authorizer</b> (<tt><a class="external-link" href="static/current/apidocs/org/apache/shiro/authz/Authorizer.html">org.apache.shiro.authz.Authorizer</a></tt>)<br clear="none">
-The <tt>Authorizer</tt> is the component responsible determining users' access control in the application.  It is the mechanism that ultimately says if a user is allowed to do something or not.  Like the <tt>Authenticator</tt>, the <tt>Authorizer</tt> also knows how to coordinate with multiple back-end data sources to access role and permission information.  The <tt>Authorizer</tt> uses this information to determine exactly if a user is allowed to perform a given action.
-<br clear="none" class="atl-forced-newline">
-<br clear="none" class="atl-forced-newline"></li><li><b>SessionManager</b> (<tt><a class="external-link" href="static/current/apidocs/org/apache/shiro/session/mgt/SessionManager.html">org.apache.shiro.session.mgt.SessionManager</a></tt>)<br clear="none">
-The <tt>SessionManager</tt> knows how to create and manage user <tt>Session</tt> lifecycles to provide a robust Session experience for users in all environments.  This is a unique feature in the world of security frameworks - Shiro has the ability to natively manage user Sessions in any environment, even if there is no Web/Servlet or EJB container available.  By default, Shiro will use an existing session mechanism if available, (e.g. Servlet Container), but if there isn't one, such as in a standalone application or non-web environment, it will use its built-in enterprise session management to offer the same programming experience.  The <tt>SessionDAO</tt> exists to allow any datasource to be used to persist sessions.
-<br clear="none" class="atl-forced-newline">
-<br clear="none" class="atl-forced-newline">
-	<ul><li><b>SessionDAO</b> (<tt><a class="external-link" href="static/current/apidocs/org/apache/shiro/session/mgt/eis/SessionDAO.html">org.apache.shiro.session.mgt.eis.SessionDAO</a></tt>)<br clear="none">
-The <tt>SessionDAO</tt> performs <tt>Session</tt> persistence (CRUD) operations on behalf of the <tt>SessionManager</tt>.  This allows any data store to be plugged in to the Session Management infrastructure.
-<br clear="none" class="atl-forced-newline">
-<br clear="none" class="atl-forced-newline"></li></ul>
-	</li><li><b>CacheManager</b> (<tt><a class="external-link" href="static/current/apidocs/org/apache/shiro/cache/CacheManager.html">org.apache.shiro.cache.CacheManager</a></tt>)<br clear="none">
-The <tt>CacheManager</tt> creates and manages <tt>Cache</tt> instance lifecycles used by other Shiro components.  Because Shiro can access many back-end data sources for authentication, authorization and session management, caching has always been a first-class architectural feature in the framework to improve performance while using these data sources.  Any of the modern open-source and/or enterprise caching products can be plugged in to Shiro to provide a fast and efficient user-experience.
-<br clear="none" class="atl-forced-newline">
-<br clear="none" class="atl-forced-newline"></li><li><b>Cryptography</b> (<tt><a class="external-link" href="static/current/apidocs/org/apache/shiro/crypto/package-summary.html">org.apache.shiro.crypto.*</a></tt>)<br clear="none">
-Cryptography is a natural addition to an enterprise security framework.  Shiro's <tt>crypto</tt> package contains easy-to-use and understand representations of crytographic Ciphers, Hashes (aka digests) and different codec implementations.  All of the classes in this package are carefully designed to be very easy to use and easy to understand.  Anyone who has used Java's native cryptography support knows it can be a challenging animal to tame.  Shiro's crypto APIs simplify the complicated Java mechanisms and make cryptography easy to use for normal mortal human beings.
-<br clear="none" class="atl-forced-newline">
-<br clear="none" class="atl-forced-newline"></li><li><b>Realms</b> (<tt><a class="external-link" href="static/current/apidocs/org/apache/shiro/realm/Realm.html">org.apache.shiro.realm.Realm</a></tt>)<br clear="none">
-As mentioned above, Realms act as the &#8216;bridge&#8217; or &#8216;connector&#8217; between Shiro and your application&#8217;s security data. When it comes time to actually interact with security-related data like user accounts to perform authentication (login) and authorization (access control), Shiro looks up many of these things from one or more Realms configured for an application.  You can configure as many <tt>Realms</tt> as you need (usually one per data source) and Shiro will coordinate with them as necessary for both authentication and authorization.</li></ul>
-
-
-<h2><a name="Architecture-The%7B%7BSecurityManager%7D%7D"></a>The <tt>SecurityManager</tt></h2>
-
-<p>Because Shiro's API encourages a <tt>Subject</tt>-centric programming approach, most application developers will rarely, if ever, interact with the <tt>SecurityManager</tt> directly (framework developers however might sometimes find it useful). Even so, it is still important to know how the <tt>SecurityManager</tt> functions, especially when configuring one for an application.</p>
-
-<h2><a name="Architecture-Design"></a>Design</h2>
-
-<p>As stated previously, the application's <tt>SecurityManager</tt> performs security operations and manages state for <em>all</em> application users.  In Shiro's default <tt>SecurityManager</tt> implementations, this includes:</p>
-
-<ul><li>Authentication</li><li>Authorization</li><li>Session Management</li><li>Cache Management</li><li><a href="realm.html" title="Realm">Realm</a> coordination</li><li>Event propagation</li><li>"Remember Me" Services</li><li>Subject creation</li><li>Logout<br clear="none">
-and more.</li></ul>
-
-
-<p>But this is a lot of functionality to try to manage in a single component.  And, making these things flexible and customizable would be very difficult if everything were lumped into a single implementation class.  </p>
-
-<p>To simplify configuration and enable flexible configuration/pluggability, Shiro's implementations are all highly modular in design - so modular in fact, that the SecurityManager implementation (and its class-hierarchy) does not do much at all.  Instead, the <tt>SecurityManager</tt> implementations mostly act as a lightweight 'container' component, delegating almost all behavior to nested/wrapped components.  This 'wrapper' design is reflected in the detailed architecture diagram above.</p>
-
-<p>While the components actually execute the logic, the <tt>SecurityManager</tt> implementation knows how and when to coordinate the components for the correct behavior.</p>
-
-<p>The <tt>SecurityManager</tt> implementations and are also JavaBeans compatible, which allows you (or a configuration mechanism) to easily customize the pluggable components via standard JavaBeans accessor/mutator methods (get*/set*).  This means the Shiro's architectural modularity can translate into very easy configuration for custom behavior.</p>
-
+<a name="Architecture-HighLevelOverview"></a>
+<h2>High-Level Overview</h2>
+<p>At the highest conceptual level, Shiro&rsquo;s architecture has 3 primary concepts: the <code>Subject</code>, <code>SecurityManager</code> and <code>Realms</code>. The following diagram is a high-level overview of how these components interact, and we&rsquo;ll cover each concept below:</p>
+<img style="margin:0px auto;display:block" src="assets/images/ShiroBasicArchitecture.png"/>
+<ul>
+  <li>
+    <p><strong>Subject</strong>: As we&rsquo;ve mentioned in our <a href="tutorial.html">Tutorial</a>, the <code>Subject</code> is essentially a security specific &lsquo;view&rsquo; of the the currently executing user. Whereas the word &lsquo;User&rsquo; often implies a human being, a <code>Subject</code> can be a person, but it could also represent a 3rd-party service, daemon account, cron job, or anything similar - basically anything that is currently interacting with the software.</p>
+    <p><code>Subject</code> instances are all bound to (and require) a <code>SecurityManager</code>. When you interact with a <code>Subject</code>, those interactions translate to subject-specific interactions with the <code>SecurityManager</code>.</p>
+  </li>
+  <li>
+    <p><strong>SecurityManager</strong>: The <code>SecurityManager</code> is the heart of Shiro&#8217;s architecture and acts as a sort of &rsquo;umbrella&#8217; object that coordinates its internal security components that together form an object graph. However, once the SecurityManager and its internal object graph is configured for an application, it is usually left alone and application developers spend almost all of their time with the <code>Subject</code> API.</p>
+    <p>We will talk about the <code>SecurityManager</code> in detail later on, but it is important to realize that when you interact with a <code>Subject</code>, it is really the <code>SecurityManager</code> behind the scenes that does all the heavy lifting for any <code>Subject</code> security operation. This is reflected in the basic flow diagram above.</p>
+  </li>
+  <li>
+    <p><strong>Realms</strong>: Realms act as the &#8216;bridge&#8217; or &#8216;connector&#8217; between Shiro and your application&#8217;s security data. When it comes time to actually interact with security-related data like user accounts to perform authentication (login) and authorization (access control), Shiro looks up many of these things from one or more Realms configured for an application.</p>
+    <p>In this sense a Realm is essentially a security-specific <a class="external-link" href="https://en.wikipedia.org/wiki/Data_access_object" rel="nofollow">DAO</a>: it encapsulates connection details for data sources and makes the associated data available to Shiro as needed. When configuring Shiro, you must specify at least one Realm to use for authentication and/or authorization. The <code>SecurityManager</code> may be configured with multiple Realms, but at least one is required.</p>
+    <p>Shiro provides out-of-the-box Realms to connect to a number of security data sources (aka directories) such as LDAP, relational databases (JDBC), text configuration sources like INI and properties files, and more. You can plug-in your own Realm implementations to represent custom data sources if the default Realms do not meet your needs.</p>
+    <p>Like other internal components, the Shiro <code>SecurityManager</code> manages how Realms are used to acquire security and identity data to be represented as <code>Subject</code> instances.</li></ul></p>
+  </li>
+</ul>
+<a name="Architecture-DetailedArchitecture"></a>
+<h2><a href="#detailed-architecture" name="detailed-architecture">Detailed Architecture</a></h2>
+<p>The following diagram shows Shiro&rsquo;s core architectural concepts followed by short summaries of each:</p>
+<img style="margin:0px auto;display:block" src="assets/images/ShiroArchitecture.png"/>
+<ul>
+  <li>
+  <p><strong>Subject</strong> (<a href="static/current/apidocs/org/apache/shiro/subject/Subject.html"><code>org.apache.shiro.subject.Subject</code></a>)<br/>A security-specific &lsquo;view&rsquo; of the entity (user, 3rd-party service, cron job, etc) currently interacting with the software.</p></li>
+  <li>
+  <p><strong>SecurityManager</strong> (<a href="static/current/apidocs/org/apache/shiro/mgt/SecurityManager.html">org.apache.shiro.mgt.SecurityManager</a>)<br/>As mentioned above, the <code>SecurityManager</code> is the heart of Shiro&rsquo;s architecture. It is mostly an &lsquo;umbrella&rsquo; object that coordinates its managed components to ensure they work smoothly together. It also manages Shiro&rsquo;s view of every application user, so it knows how to perform security operations per user.</p></li>
+  <li>
+    <p><strong>Authenticator</strong> (<a href="static/current/apidocs/org/apache/shiro/authc/Authenticator.html">org.apache.shiro.authc.Authenticator</a>)<br/>The <code>Authenticator</code> is the component that is responsible for executing and reacting to authentication (log-in) attempts by users. When a user tries to log-in, that logic is executed by the <code>Authenticator</code>. The <code>Authenticator</code> knows how to coordinate with one or more <code>Realms</code> that store relevant user/account information. The data obtained from these <code>Realms</code> is used to verify the user&rsquo;s identity to guarantee the user really is who they say they are.</p>
+    <ul>
+      <li>
+      <p><strong>Authentication Strategy</strong> (<a href="static/current/apidocs/org/apache/shiro/authc/pam/AuthenticationStrategy.html">org.apache.shiro.authc.pam.AuthenticationStrategy</a>)<br/>If more than one <code>Realm</code> is configured, the <code>AuthenticationStrategy</code> will coordinate the Realms to determine the conditions under which an authentication attempt succeeds or fails (for example, if one realm succeeds but others fail, is the attempt successful? Must all realms succeed? Only the first?).</p></li>
+    </ul>
+  </li>
+  <li>
+  <p><strong>Authorizer</strong> (<a href="static/current/apidocs/org/apache/shiro/authz/Authorizer.html">org.apache.shiro.authz.Authorizer</a>)<br/>The <code>Authorizer</code> is the component responsible determining users&rsquo; access control in the application. It is the mechanism that ultimately says if a user is allowed to do something or not. Like the <code>Authenticator</code>, the <code>Authorizer</code> also knows how to coordinate with multiple back-end data sources to access role and permission information. The <code>Authorizer</code> uses this information to determine exactly if a user is allowed to perform a given action.</p></li>
+  <li>
+    <p><strong>SessionManager</strong> (<a href="static/current/apidocs/org/apache/shiro/session/mgt/SessionManager.html">org.apache.shiro.session.mgt.SessionManager</a>)<br/>The <code>SessionManager</code> knows how to create and manage user <code>Session</code> lifecycles to provide a robust Session experience for users in all environments. This is a unique feature in the world of security frameworks - Shiro has the ability to natively manage user Sessions in any environment, even if there is no Web/Servlet or EJB container available. By default, Shiro will use an existing session mechanism if available, (e.g. Servlet Container), but if there isn&rsquo;t one, such as in a standalone application or non-web environment, it will use its built-in enterprise session management to offer the same programming experience. The <code>SessionDAO</code> exists to allow any datasource to be used to persist sessions.</p>
+    <ul>
+      <li>
+      <p><strong>SessionDAO</strong> (<a href="static/current/apidocs/org/apache/shiro/session/mgt/eis/SessionDAO.html">org.apache.shiro.session.mgt.eis.SessionDAO</a>)<br/>The <code>SessionDAO</code> performs <code>Session</code> persistence (CRUD) operations on behalf of the <code>SessionManager</code>. This allows any data store to be plugged in to the Session Management infrastructure.</p></li>
+    </ul>
+  </li>
+  <li>
+  <p><strong>CacheManager</strong> (<a href="static/current/apidocs/org/apache/shiro/cache/CacheManager.html">org.apache.shiro.cache.CacheManager</a>)<br/>The <code>CacheManager</code> creates and manages <code>Cache</code> instance lifecycles used by other Shiro components. Because Shiro can access many back-end data sources for authentication, authorization and session management, caching has always been a first-class architectural feature in the framework to improve performance while using these data sources. Any of the modern open-source and/or enterprise caching products can be plugged in to Shiro to provide a fast and efficient user-experience.</p></li>
+  <li>
+  <p><strong>Cryptography</strong> (<a href="static/current/apidocs/org/apache/shiro/crypto/package-summary.html">org.apache.shiro.crypto.*</a>)<br/>Cryptography is a natural addition to an enterprise security framework. Shiro&rsquo;s <code>crypto</code> package contains easy-to-use and understand representations of crytographic Ciphers, Hashes (aka digests) and different codec implementations. All of the classes in this package are carefully designed to be very easy to use and easy to understand. Anyone who has used Java&rsquo;s native cryptography support knows it can be a challenging animal to tame. Shiro&rsquo;s crypto APIs simplify the complicated Java mechanisms and make cryptography easy to use for normal mortal human beings.</p></li>
+  <li>
+  <p><strong>Realms</strong> (<a href="static/current/apidocs/org/apache/shiro/realm/Realm.html">org.apache.shiro.realm.Realm</a>)<br/>As mentioned above, Realms act as the &#8216;bridge&#8217; or &#8216;connector&#8217; between Shiro and your application&#8217;s security data. When it comes time to actually interact with security-related data like user accounts to perform authentication (login) and authorization (access control), Shiro looks up many of these things from one or more Realms configured for an application. You can configure as many <code>Realms</code> as you need (usually one per data source) and Shiro will coordinate with them as necessary for both authentication and authorization.</p></li>
+</ul>
+<a name="Architecture-The%7B%7BSecurityManager%7D%7D"></a>
+<h2>The <code>SecurityManager</code></h2>
+<p>Because Shiro&rsquo;s API encourages a <code>Subject</code>-centric programming approach, most application developers will rarely, if ever, interact with the <code>SecurityManager</code> directly (framework developers however might sometimes find it useful). Even so, it is still important to know how the <code>SecurityManager</code> functions, especially when configuring one for an application.</p>
+<a name="Architecture-Design"></a>
+<h2><a href="#design" name="design">Design</a></h2>
+<p>As stated previously, the application&rsquo;s <code>SecurityManager</code> performs security operations and manages state for <em>all</em> application users. In Shiro&rsquo;s default <code>SecurityManager</code> implementations, this includes:</p>
+<ul>
+  <li>Authentication</li>
+  <li>Authorization</li>
+  <li>Session Management</li>
+  <li>Cache Management</li>
+  <li><a href="realm.html">Realm</a> coordination</li>
+  <li>Event propagation</li>
+  <li>&ldquo;Remember Me&rdquo; Services</li>
+  <li>Subject creation</li>
+  <li>Logout and more.</li>
+</ul>
+<p>But this is a lot of functionality to try to manage in a single component. And, making these things flexible and customizable would be very difficult if everything were lumped into a single implementation class.</p>
+<p>To simplify configuration and enable flexible configuration/pluggability, Shiro&rsquo;s implementations are all highly modular in design - so modular in fact, that the SecurityManager implementation (and its class-hierarchy) does not do much at all. Instead, the <code>SecurityManager</code> implementations mostly act as a lightweight &lsquo;container&rsquo; component, delegating almost all behavior to nested/wrapped components. This &lsquo;wrapper&rsquo; design is reflected in the detailed architecture diagram above.</p>
+<p>While the components actually execute the logic, the <code>SecurityManager</code> implementation knows how and when to coordinate the components for the correct behavior.</p>
+<p>The <code>SecurityManager</code> implementations and are also JavaBeans compatible, which allows you (or a configuration mechanism) to easily customize the pluggable components via standard JavaBeans accessor/mutator methods (get*/set*). This means the Shiro&rsquo;s architectural modularity can translate into very easy configuration for custom behavior.</p>
 <div class="panelMacro">
     <table class="tipMacro">
         <colgroup span="1">
@@ -194,20 +170,17 @@ and more.</li></ul>
             <td colspan="1" rowspan="1">
                 <b>Easy Configuration</b>
                 <br clear="none">
-                Because of JavaBeans compatibility, it is very easy to configure the <tt>SecurityManager</tt> with custom components via any mechanism that supports JavaBeans-style configuration, such as <a href="spring.html" title="Spring">Spring</a>, Guice, JBoss, etc.
+                Because of JavaBeans compatibility, it is very easy to configure the `SecurityManager` with custom components via any mechanism that supports JavaBeans-style configuration, such as <a href="spring.html" title="Spring">Spring</a>, Guice, JBoss, etc.
             </td>
         </tr>
         </tbody>
     </table>
 </div>
-
-<p>We will cover <a href="configuration.html" title="Configuration">Configuration</a> next.</p>
-
-<h2><a name="Architecture-Lendahandwithdocumentation"></a>Lend a hand with documentation </h2>
-
-<p>While we hope this documentation helps you with the work you're doing with Apache Shiro, the community is improving and expanding the documentation all the time.  If you'd like to help the Shiro project, please consider corrected, expanding, or adding documentation where you see a need. Every little bit of help you provide expands the community and in turn improves Shiro. </p>
-
-<p>The easiest way to contribute your documentation is to send it to the <a class="external-link" href="http://shiro-user.582556.n2.nabble.com/" rel="nofollow">User Forum</a> or the <a href="mailing-lists.html" title="Mailing Lists">User Mailing List</a>.</p>
+<p>We will cover <a href="configuration.html">Configuration</a> next.</p>
+<a name="Architecture-Lendahandwithdocumentation"></a>
+<h2><a href="#lend-a-hand-with-documentation" name="lend-a-hand-with-documentation">Lend a hand with documentation</a></h2>
+<p>While we hope this documentation helps you with the work you&rsquo;re doing with Apache Shiro, the community is improving and expanding the documentation all the time. If you&rsquo;d like to help the Shiro project, please consider corrected, expanding, or adding documentation where you see a need. Every little bit of help you provide expands the community and in turn improves Shiro.</p>
+<p>The easiest way to contribute your documentation is to send it to the <a href="http://shiro-user.582556.n2.nabble.com/">User Forum</a> or the <a href="mailing-lists.html">User Mailing List</a>.</p>
 
         </div>
 

Modified: shiro/site/publish/articles.html
URL: http://svn.apache.org/viewvc/shiro/site/publish/articles.html?rev=1766414&r1=1766413&r2=1766414&view=diff
==============================================================================
--- shiro/site/publish/articles.html (original)
+++ shiro/site/publish/articles.html Mon Oct 24 14:33:52 2016
@@ -78,70 +78,74 @@
 
         <div id="content">
 
-            <h1><a name="Articles-ApacheShiroArticles"></a>Apache Shiro Articles</h1>
-
-<p>Here are some articles written by and for members of the Apache Shiro community.  Please post any errata to the user or dev <a href="mailing-lists.html" title="Mailing Lists">mailing lists</a>.</p>
-
-<h2><a name="Articles-IntroductoryArticles"></a>Introductory Articles</h2>
+            <a name="Articles-ApacheShiroArticles"></a>
+<h1><a href="#apache-shiro-articles" name="apache-shiro-articles">Apache Shiro Articles</a></h1>
+<p>Here are some articles written by and for members of the Apache Shiro community. Please post any errata to the user or dev <a href="mailing-lists.html" title="Mailing Lists">mailing lists</a>.</p>
+<a name="Articles-IntroductoryArticles"></a>
+<h2><a href="#introductory-articles" name="introductory-articles">Introductory Articles</a></h2>
 <p>New to Shiro? Here are some great introductory articles:</p>
-
-<ul class="alternate" type="square"><li><b><a class="external-link" href="https://www.infoq.com/articles/apache-shiro" rel="nofollow">Application Security with Apache Shiro</a></b> InfoQ article by Les Hazlewood, Apache Shiro PMC Chair.</li></ul>
-
-<ul class="alternate" type="square"><li><b><a href="webapp-tutorial.html" title="Apache Shiro Beginner's Webapp Tutorial">Apache Shiro Beginner's Webapp Tutorial</a>: a step-by-step tutorial to enable Shiro in a web application</b> on 19 November 2013 by Les Hazlewood</li></ul>
-
-<ul class="alternate" type="square"><li><b><a class="external-link" href="https://stormpath.com/blog/whats-new-apache-shiro-12" rel="nofollow">What's new in Apache Shiro 1.2</a></b> on 13 March 2012 by Les Hazlewood.</li></ul>
-
-<ul class="alternate" type="square"><li><b><a class="external-link" href="http://www.ibm.com/developerworks/web/library/wa-apacheshiro/" rel="nofollow">Introducing Apache Shiro</a></b> by Nathan Good on IBM DeveloperWorks, 14 September 2010.</li></ul>
-
-<ul class="alternate" type="square"><li><b>An Introduction to Shiro (formerly JSecurity/Ki) - A Beginner's Tutorial</b> by <a class="external-link" href="http://www.brucephillips.name" rel="nofollow">Bruce Phillips</a>:
-	<ul class="alternate" type="square"><li><a class="external-link" href="http://www.brucephillips.name/blog/index.cfm/2009/4/5/An-Introduction-to-Ki-formerly-JSecurity--A-Beginners--Tutorial-Part-1" rel="nofollow">Part 1</a></li><li><a class="external-link" href="http://www.brucephillips.name/blog/index.cfm/2009/4/5/An-Introduction-to-Ki-formerly-JSecurity--A-Beginners--Tutorial-Part-2" rel="nofollow">Part 2</a></li><li><a class="external-link" href="http://www.brucephillips.name/blog/index.cfm/2009/4/5/An-Introduction-to-Ki-formerly-JSecurity--A-Beginners--Tutorial-Part-3" rel="nofollow">Part 3</a></li><li><a class="external-link" href="http://www.brucephillips.name/blog/index.cfm/2009/4/5/An-Introduction-to-Ki-formerly-JSecurity--A-Beginners--Tutorial-Part-4" rel="nofollow">Part 4</a></li><li><a class="external-link" href="http://www.brucephillips.name/blog/index.cfm/2009/5/1/An-Introduction-to-Ki-formerly-JSecurity--A-Beginners-Tutorial-Part-5" rel="nofollow">Part 5</a></li></ul>
-	</li></ul>
-
-<h2><a name="Articles-AdditionalArticles"></a>Additional Articles</h2>
-<p>Once you've gotten your feet wet, you might find these useful too:</p>
-
-<ul class="alternate" type="square"><li><b><a class="external-link" href="http://czetsuya-tech.blogspot.com/2012/10/how-to-integrate-apache-shiro-with.html?spref=tw" rel="nofollow">How to Integrate Apache Shiro with JavaEE6</a></b> by czetsuya on 11 October 2012.</li></ul>
-
-
-<ul class="alternate" type="square"><li><b><a class="external-link" href="https://mehmetceliksoy.wordpress.com/2015/06/28/shiro-jdbc-realm/" rel="nofollow">Custom Apache Shiro JDBC Realm</a></b> by Mehmet Celiksoy</li></ul>
-
-
-<ul class="alternate" type="square"><li><b><a class="external-link" href="https://bubba-h57.github.io/H57_Shiro/" rel="nofollow">Spring MVC + Shiro + myBatis + JSR-303 Validation</a></b> by Rob Hines et. al. on 2 April 2012.</li></ul>
-
-
-<ul class="alternate" type="square"><li><b><a class="external-link" href="https://www.zkoss.org/wiki/Small_Talks/2012/March/Securing_ZK_Applications_With_Apache_Shiro" rel="nofollow">Securing ZK Applications with Apache Shiro</a></b> by Ashish Dasnurkar on 6 March 2012.</li></ul>
-
-
-<ul class="alternate" type="square"><li><b>Facebook Login with Apache Shiro</b> by Mike Warren on 28 November 2011
-	<ul class="alternate" type="square"><li><a class="external-link" href="https://mrdwnotes.wordpress.com/2011/11/28/using-apache-shiro-security-to-allow-login-via-facebook-part-1/" rel="nofollow">Part 1</a></li><li><a class="external-link" href="https://mrdwnotes.wordpress.com/2011/11/28/using-apache-shiro-security-to-allow-login-via-facebook-part-2/" rel="nofollow">Part 2</a></li></ul>
-	</li></ul>
-
-
-<ul class="alternate" type="square"><li><b>Apache Shiro - a blog series by Meri</b>
-	<ul class="alternate" type="square"><li><a class="external-link" href="http://meri-stuff.blogspot.com/2011/03/apache-shiro-part-1-basics.html" rel="nofollow">Part 1 - Basics</a> on 27 March 2011</li><li><a class="external-link" href="http://meri-stuff.blogspot.com/2011/04/apache-shiro-part-2-realms-database-and.html" rel="nofollow">Part 2 - Realms, Database and PGP Certificates</a> on 18 April 2011</li><li><a class="external-link" href="http://meri-stuff.blogspot.com/2011/12/apache-shiro-part-3-cryptography.html" rel="nofollow">Part 3 - Cryptography</a> on 4 December 2011</li></ul>
-	</li></ul>
-
-
-<ul class="alternate" type="square"><li><b><a class="external-link" href="https://stormpath.com/blog/new-rbac-resource-based-access-control" rel="nofollow">The New RBAC: Resource-Based Access Control</a></b> by Les Hazlewood on 9 May 2011</li></ul>
-
-
-<ul class="alternate" type="square"><li><b><a class="external-link" href="http://blog.xebia.com/author/yamsellem/" rel="nofollow">HTTP Authentication and Security with Apache Shiro</a></b> blog article by yamsellem on 18 April 2011.</li></ul>
-
-
-<ul class="alternate" type="square"><li><b><a class="external-link" href="http://spring-java-ee.blogspot.com/2011/04/using-shiro-for-authorization-via-cdi.html" rel="nofollow">Using Shiro for Authorization via CDI Interceptors then Easily Test with Arquillian</a></b> blog article by Hendy Irawan on 16 April 2011.</li></ul>
-
-
-<ul class="alternate" type="square"><li><b><a class="external-link" href="http://blogs.mulesoft.com/dev/mule-dev/apache-shiro-support-for-mule/" rel="nofollow">Apache Shiro Support for Mule</a></b> by Dan Diephouse on 10 January 2011.</li></ul>
-
-
-<ul class="alternate" type="square"><li><b><a class="external-link" href="http://www.gdevelop.com/blog/2010/12/apache-shiro-on-appengine" rel="nofollow">Apache Shiro on Google AppEngine</a></b> by Trung on 13 December 2010.</li></ul>
-
-
-<ul class="alternate" type="square"><li><b><a class="external-link" href="http://techbeats.deluan.com/apache-shiro-tags-for-jsffacelets" rel="nofollow">Apache Shiro tags for JSF - Securing Your JSF Pages</a></b> by Deluan Quint&#227;o on 1 November 2010.</li></ul>
-
-
-<ul class="alternate" type="square"><li><b>Shiro DevNexus 2009 Presentation</b> by Jeremy Haile: (<a href="assets/images/articles/Ki-DevNexus-2009.pdf?version=1&amp;modificationDate=1246602947000">PDF</a>) (<a href="assets/images/articles/Ki-DevNexus-2009.key.zip?version=1&amp;modificationDate=1246602947000">Keynote</a>) (<a href="assets/images/articles/Ki-DevNexus-2009.ppt.zip?version=1&amp;modificationDate=1246602947000">Powerpoint</a>)</li></ul>
-
+<ul>
+  <li>
+  <p><strong><a href="https://www.infoq.com/articles/apache-shiro">Application Security with Apache Shiro</a></strong> InfoQ article by Les Hazlewood, Apache Shiro PMC Chair.</p></li>
+  <li>
+  <p><strong><a href="webapp-tutorial.html" title="Apache Shiro Beginner&#39;s Webapp Tutorial">Apache Shiro Beginner&rsquo;s Webapp Tutorial</a>: a step-by-step tutorial to enable Shiro in a web application</strong> on 19 November 2013 by Les Hazlewood</p></li>
+  <li>
+  <p><strong><a href="https://stormpath.com/blog/whats-new-apache-shiro-12">What&rsquo;s new in Apache Shiro 1.2</a></strong> on 13 March 2012 by Les Hazlewood.</p></li>
+  <li>
+  <p><strong><a href="http://www.ibm.com/developerworks/web/library/wa-apacheshiro/">Introducing Apache Shiro</a></strong> by Nathan Good on IBM DeveloperWorks, 14 September 2010.</p></li>
+  <li>
+    <p><strong>An Introduction to Shiro (formerly JSecurity/Ki) - A Beginner&rsquo;s Tutorial</strong> by <a href="http://www.brucephillips.name">Bruce Phillips</a>:</p>
+    <ul>
+      <li><a href="http://www.brucephillips.name/blog/index.cfm/2009/4/5/An-Introduction-to-Ki-formerly-JSecurity--A-Beginners--Tutorial-Part-1">Part 1</a></li>
+      <li><a href="http://www.brucephillips.name/blog/index.cfm/2009/4/5/An-Introduction-to-Ki-formerly-JSecurity--A-Beginners--Tutorial-Part-2">Part 2</a></li>
+      <li><a href="http://www.brucephillips.name/blog/index.cfm/2009/4/5/An-Introduction-to-Ki-formerly-JSecurity--A-Beginners--Tutorial-Part-3">Part 3</a></li>
+      <li><a href="http://www.brucephillips.name/blog/index.cfm/2009/4/5/An-Introduction-to-Ki-formerly-JSecurity--A-Beginners--Tutorial-Part-4">Part 4</a></li>
+      <li><a href="http://www.brucephillips.name/blog/index.cfm/2009/5/1/An-Introduction-to-Ki-formerly-JSecurity--A-Beginners-Tutorial-Part-5">Part 5</a></li>
+    </ul>
+  </li>
+</ul>
+<a name="Articles-AdditionalArticles"></a>
+<h2><a href="#additional-articles" name="additional-articles">Additional Articles</a></h2>
+<p>Once you&rsquo;ve gotten your feet wet, you might find these useful too:</p>
+<ul>
+  <li>
+  <p><strong><a href="http://czetsuya-tech.blogspot.com/2012/10/how-to-integrate-apache-shiro-with.html?spref=tw">How to Integrate Apache Shiro with JavaEE6</a></strong> by czetsuya on 11 October 2012.</p></li>
+  <li>
+  <p><strong><a href="https://mehmetceliksoy.wordpress.com/2015/06/28/shiro-jdbc-realm/">Custom Apache Shiro JDBC Realm</a></strong> by Mehmet Celiksoy</p></li>
+  <li>
+  <p><strong><a href="https://bubba-h57.github.io/H57_Shiro/">Spring MVC + Shiro + myBatis + JSR-303 Validation</a></strong> by Rob Hines et. al. on 2 April 2012.</p></li>
+  <li>
+  <p><strong><a href="https://www.zkoss.org/wiki/Small_Talks/2012/March/Securing_ZK_Applications_With_Apache_Shiro">Securing ZK Applications with Apache Shiro</a></strong> by Ashish Dasnurkar on 6 March 2012.</p></li>
+  <li>
+    <p><strong>Facebook Login with Apache Shiro</strong> by Mike Warren on 28 November 2011</p>
+    <ul>
+      <li><a href="https://mrdwnotes.wordpress.com/2011/11/28/using-apache-shiro-security-to-allow-login-via-facebook-part-1/">Part 1</a></li>
+      <li><a href="https://mrdwnotes.wordpress.com/2011/11/28/using-apache-shiro-security-to-allow-login-via-facebook-part-2/">Part 2</a></li>
+    </ul>
+  </li>
+  <li>
+    <p><strong>Apache Shiro - a blog series by Meri</strong></p>
+    <ul>
+      <li><a href="http://meri-stuff.blogspot.com/2011/03/apache-shiro-part-1-basics.html">Part 1 - Basics</a> on 27 March 2011</li>
+      <li><a href="http://meri-stuff.blogspot.com/2011/04/apache-shiro-part-2-realms-database-and.html">Part 2 - Realms, Database and PGP Certificates</a> on 18 April 2011</li>
+      <li><a href="http://meri-stuff.blogspot.com/2011/12/apache-shiro-part-3-cryptography.html">Part 3 - Cryptography</a> on 4 December 2011</li>
+    </ul>
+  </li>
+  <li>
+  <p><strong><a href="https://stormpath.com/blog/new-rbac-resource-based-access-control">The New RBAC: Resource-Based Access Control</a></strong> by Les Hazlewood on 9 May 2011</p></li>
+  <li>
+  <p><strong><a href="http://blog.xebia.com/author/yamsellem/">HTTP Authentication and Security with Apache Shiro</a></strong> blog article by yamsellem on 18 April 2011.</p></li>
+  <li>
+  <p><strong><a href="http://spring-java-ee.blogspot.com/2011/04/using-shiro-for-authorization-via-cdi.html">Using Shiro for Authorization via CDI Interceptors then Easily Test with Arquillian</a></strong> blog article by Hendy Irawan on 16 April 2011.</p></li>
+  <li>
+  <p><strong><a href="http://blogs.mulesoft.com/dev/mule-dev/apache-shiro-support-for-mule/">Apache Shiro Support for Mule</a></strong> by Dan Diephouse on 10 January 2011.</p></li>
+  <li>
+  <p><strong><a href="http://www.gdevelop.com/blog/2010/12/apache-shiro-on-appengine">Apache Shiro on Google AppEngine</a></strong> by Trung on 13 December 2010.</p></li>
+  <li>
+  <p><strong><a href="http://techbeats.deluan.com/apache-shiro-tags-for-jsffacelets">Apache Shiro tags for JSF - Securing Your JSF Pages</a></strong> by Deluan Quintão on 1 November 2010.</p></li>
+  <li>
+  <p><strong>Shiro DevNexus 2009 Presentation</strong> by Jeremy Haile: (<a href="assets/images/articles/Ki-DevNexus-2009.pdf?version=1&modificationDate=1246602947000">PDF</a>) (<a href="assets/images/articles/Ki-DevNexus-2009.key.zip?version=1&modificationDate=1246602947000">Keynote</a>) (<a href="assets/images/articles/Ki-DevNexus-2009.ppt.zip?version=1&modificationDate=1246602947000">Powerpoint</a>)</p></li>
+</ul>
 
         </div>
 

Modified: shiro/site/publish/authentication-guide.html
URL: http://svn.apache.org/viewvc/shiro/site/publish/authentication-guide.html?rev=1766414&r1=1766413&r2=1766414&view=diff
==============================================================================
--- shiro/site/publish/authentication-guide.html (original)
+++ shiro/site/publish/authentication-guide.html Mon Oct 24 14:33:52 2016
@@ -80,8 +80,6 @@
 
             <p>This page has been moved.  You are being redirected.</p>
 
-<p></p>
-
 <div class="panelMacro">
     <table class="noteMacro">
         <colgroup span="1">
@@ -97,7 +95,7 @@
             <td colspan="1" rowspan="1">
                 <b>Redirection Notice</b>
                 <br clear="none">
-                This page should redirect to <a href="java-authentication-guide.html" title="Java Authentication Guide">Java Authentication Guide</a>.
+                This page should redirect to <a href="java-authentication-guide.html" title="Authentication Guide">Authentication Guide</a>.
             </td>
         </tr>
         </tbody>
@@ -105,9 +103,9 @@
 </div>
 
 <script type="text/javascript">
-<!--
-window.location = "java-authentication-guide.html"
-//-->
+    <!--
+    window.location = "java-authentication-guide.html"
+    //-->
 </script>