Modified: shiro/site/publish/configuration.html
URL: 
http://svn.apache.org/viewvc/shiro/site/publish/configuration.html?rev=1766414&r1=1766413&r2=1766414&view=diff
==============================================================================
--- shiro/site/publish/configuration.html (original)
+++ shiro/site/publish/configuration.html Mon Oct 24 14:33:52 2016
@@ -78,13 +78,76 @@
 
         <div id="content">
 
-            <h1><a name="Configuration-ApacheShiroConfiguration"></a>Apache 
Shiro Configuration</h1>
-
-<div class="toc">
-<ul><li><a href="#Configuration-ProgrammaticConfiguration">Programmatic 
Configuration</a></li><ul><li><a 
href="#Configuration-SecurityManagerObjectGraph">SecurityManager Object 
Graph</a></li></ul><li><a href="#Configuration-INIConfiguration">INI 
Configuration</a></li><ul><li><a 
href="#Configuration-CreatingaSecurityManagerfromINI">Creating a 
SecurityManager from INI</a></li><ul><li><a 
href="#Configuration-SecurityManagerfromanINIresource">SecurityManager from an 
INI resource</a></li><li><a 
href="#Configuration-SecurityManagerfromanINIinstance">SecurityManager from an 
INI instance</a></li></ul><li><a href="#Configuration-INISections">INI 
Sections</a></li><ul><li><a 
href="#Configuration-%5Cmain%5C">[main]</a></li><ul><li><a 
href="#Configuration-Defininganobject">Defining an object</a></li><li><a 
href="#Configuration-Settingobjectproperties">Setting object 
properties</a></li><ul><li><a href="#Configuration-PrimitiveValues">Primitive 
Values</a></li><li><a href="#Configuration-ReferenceV
 alues">Reference Values</a></li><li><a 
href="#Configuration-NestedProperties">Nested Properties</a></li><li><a 
href="#Configuration-ByteArrayValues">Byte Array Values</a></li><li><a 
href="#Configuration-CollectionProperties">Collection 
Properties</a></li></ul><li><a 
href="#Configuration-Considerations">Considerations</a></li><ul><li><a 
href="#Configuration-OrderMatters">Order Matters</a></li><li><a 
href="#Configuration-OverridingInstances">Overriding Instances</a></li><li><a 
href="#Configuration-DefaultSecurityManager">Default 
SecurityManager</a></li></ul></ul><li><a 
href="#Configuration-%5Cusers%5C">[users]</a></li><ul><li><a 
href="#Configuration-LineFormat">Line Format</a></li><li><a 
href="#Configuration-EncryptingPasswords">Encrypting 
Passwords</a></li></ul><li><a 
href="#Configuration-%5Croles%5C">[roles]</a></li><ul><li><a 
href="#Configuration-LineFormat">Line Format</a></li></ul><li><a 
href="#Configuration-%5Curls%5C">[urls]</a></li></ul></ul><li><a 
href="#Configuration-Lendaha
 ndwithdocumentation">Lend a hand with documentation</a></li></ul></div>
-
-<p>Shiro is designed to work in any environment, from simple command-line 
applications to the largest enterprise clustered applications.  Because of this 
diversity of environments, there are a number of configuration mechanisms that 
are suitable for configuration.  This section covers the configuration 
mechanisms that are supported by Shiro core only.</p>
-
+            <a name="Configuration-ApacheShiroConfiguration"></a>
+<h1><a href="#apache-shiro-configuration" 
name="apache-shiro-configuration">Apache Shiro Configuration</a></h1>
+<ul>
+  <li>
+    <p><a href="#Configuration-ProgrammaticConfiguration">Programmatic 
Configuration</a></p>
+    <ul>
+      <li>
+      <p><a href="#Configuration-SecurityManagerObjectGraph">SecurityManager 
Object Graph</a></p></li>
+    </ul>
+  </li>
+  <li>
+    <p><a href="#Configuration-INIConfiguration">INI Configuration</a></p>
+    <ul>
+      <li>
+        <p><a href="#Configuration-CreatingaSecurityManagerfromINI">Creating a 
SecurityManager from INI</a></p>
+        <ul>
+          <li><a 
href="#Configuration-SecurityManagerfromanINIresource">SecurityManager from an 
INI resource</a></li>
+          <li><a 
href="#Configuration-SecurityManagerfromanINIinstance">SecurityManager from an 
INI instance</a></li>
+        </ul>
+      </li>
+      <li>
+        <p><a href="#Configuration-INISections">INI Sections</a></p>
+        <ul>
+          <li>
+            <p><a href="#Configuration-%5Cmain%5C"><code>[main]</code></a></p>
+            <ul>
+              <li><a href="#Configuration-Defininganobject">Defining an 
object</a></li>
+              <li><a href="#Configuration-Settingobjectproperties">Setting 
object properties</a>
+                <ul>
+                  <li><a href="#Configuration-PrimitiveValues">Primitive 
Values</a></li>
+                  <li><a href="#Configuration-ReferenceValues">Reference 
Values</a></li>
+                  <li><a href="#Configuration-NestedProperties">Nested 
Properties</a></li>
+                  <li><a href="#Configuration-ByteArrayValues">Byte Array 
Values</a></li>
+                  <li><a href="#Configuration-CollectionProperties">Collection 
Properties</a></li>
+                </ul>
+              </li>
+              <li>
+                <p><a 
href="#Configuration-Considerations">Considerations</a></p>
+                <ul>
+                  <li><a href="#Configuration-OrderMatters">Order 
Matters</a></li>
+                  <li><a href="#Configuration-OverridingInstances">Overriding 
Instances</a></li>
+                  <li><a href="#Configuration-DefaultSecurityManager">Default 
SecurityManager</a></li>
+                </ul>
+              </li>
+            </ul>
+          </li>
+          <li>
+            <p><a 
href="#Configuration-%5Cusers%5C"><code>[users]</code></a></p>
+            <ul>
+              <li><a href="#Configuration-LineFormat">Line Format</a></li>
+              <li><a href="#Configuration-EncryptingPasswords">Encrypting 
Passwords</a></li>
+            </ul>
+          </li>
+          <li>
+            <p><a 
href="#Configuration-%5Croles%5C"><code>[roles]</code></a></p>
+            <ul>
+              <li>
+              <p><a href="#Configuration-LineFormat">Line Format</a></p></li>
+            </ul>
+          </li>
+          <li>
+          <p><a 
href="#Configuration-%5Curls%5C"><code>[urls]</code></a></p></li>
+        </ul>
+      </li>
+    </ul>
+  </li>
+  <li>
+  <p><a href="#Configuration-Lendahandwithdocumentation">Lend a hand with 
documentation</a></p></li>
+</ul>
+<p>Shiro is designed to work in any environment, from simple command-line 
applications to the largest enterprise clustered applications. Because of this 
diversity of environments, there are a number of configuration mechanisms that 
are suitable for configuration. This section covers the configuration 
mechanisms that are supported by Shiro core only.</p>
 <div class="panelMacro">
     <table class="tipMacro">
         <colgroup span="1">
@@ -98,169 +161,125 @@
             <td colspan="1" rowspan="1">
                 <b>Many Configuration Options</b>
                 <br clear="none">
-                Shiro's <tt>SecurityManager</tt> implementations and all 
supporting components are all JavaBeans compatible.  This allows Shiro to be 
configured with practically any configuration format such as regular Java, XML 
(Spring, JBoss, Guice, etc), <a class="external-link" 
href="http://www.yaml.org/"; rel="nofollow">YAML</a>, JSON, Groovy Builder 
markup, and more.
+                Shiro's <code>SecurityManager</code> implementations and all 
supporting components are all JavaBeans compatible.  This allows Shiro to be 
configured with practically any configuration format such as regular Java, XML 
(Spring, JBoss, Guice, etc), <a class="external-link" 
href="http://www.yaml.org/"; rel="nofollow">YAML</a>, JSON, Groovy Builder 
markup, and more.
             </td>
         </tr>
         </tbody>
     </table>
 </div>
+<a name="Configuration-ProgrammaticConfiguration"></a>
+<h2><a href="#programmatic-configuration" 
name="programmatic-configuration">Programmatic Configuration</a></h2>
+<p>The absolute simplest way to create a SecurityManager and make it available 
to the application is to create an 
<code>org.apache.shiro.mgt.DefaultSecurityManager</code> and wire it up in 
code. For example:</p>
+<pre><code class="java">Realm realm = //instantiate or acquire a Realm 
instance.  We&#39;ll discuss Realms later.
+SecurityManager securityManager = new DefaultSecurityManager(realm);
 
-<h2><a name="Configuration-ProgrammaticConfiguration"></a>Programmatic 
Configuration</h2>
-
-<p>The absolute simplest way to create a SecurityManager and make it available 
to the application is to create an 
<tt>org.apache.shiro.mgt.DefaultSecurityManager</tt> and wire it up in code.  
For example:</p>
-
-<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
-<pre class="code-java">
-Realm realm = <span class="code-comment">//instantiate or acquire a Realm 
instance.  We'll discuss Realms later.
-</span>
-<span class="code-object">SecurityManager</span> securityManager = <span 
class="code-keyword">new</span> DefaultSecurityManager(realm);
-
-<span class="code-comment">//Make the <span 
class="code-object">SecurityManager</span> instance available to the entire 
application via <span class="code-keyword">static</span> memory:
-</span>SecurityUtils.setSecurityManager(securityManager);
-</pre>
-</div></div>
-
-<p>Surprisingly, after only 3 lines of code, you now have a fully functional 
Shiro environment suitable for many applications.  How easy was that!?</p>
-
-<h3><a name="Configuration-SecurityManagerObjectGraph"></a>SecurityManager 
Object Graph</h3>
-
-<p>As discussed in the <a href="architecture.html" 
title="Architecture">Architecture</a> chapter, Shiro's <tt>SecurityManager</tt> 
implementations are essentially a modular object graph of nested 
security-specific components.  Because they are also JavaBeans-compatible, you 
can call any of the nested components <tt>getter</tt> and <tt>setter</tt> 
methods to configure the <tt>SecurityManager</tt> and its internal object 
graph.</p>
-
-<p>For example, if you wanted to configure the <tt>SecurityManager</tt> 
instance to use a custom <tt>SessionDAO</tt> to customize <a 
href="session-management.html" title="Session Management">Session 
Management</a>, you could set the <tt>SessionDAO</tt> directly with the nested 
SessionManager's <tt>setSessionDAO</tt> method:</p>
-
-<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
-<pre class="code-java">
-...
+//Make the SecurityManager instance available to the entire application via 
static memory: 
+SecurityUtils.setSecurityManager(securityManager);
+</code></pre>
+<p>Surprisingly, after only 3 lines of code, you now have a fully functional 
Shiro environment suitable for many applications. How easy was that!?</p>
+<a name="Configuration-SecurityManagerObjectGraph"></a>
+<h3><a href="#securitymanager-object-graph" 
name="securitymanager-object-graph">SecurityManager Object Graph</a></h3>
+<p>As discussed in the <a href="architecture.html" 
title="Architecture">Architecture</a> chapter, Shiro&rsquo;s 
<code>SecurityManager</code> implementations are essentially a modular object 
graph of nested security-specific components. Because they are also 
JavaBeans-compatible, you can call any of the nested components 
<code>getter</code> and <code>setter</code> methods to configure the 
<code>SecurityManager</code> and its internal object graph.</p>
+<p>For example, if you wanted to configure the <code>SecurityManager</code> 
instance to use a custom <code>SessionDAO</code> to customize <a 
href="session-management.html" title="Session Management">Session 
Management</a>, you could set the <code>SessionDAO</code> directly with the 
nested SessionManager&rsquo;s <code>setSessionDAO</code> method:</p>
+<pre><code class="java">...
 
-DefaultSecurityManager securityManager = <span class="code-keyword">new</span> 
DefaultSecurityManager(realm);
+DefaultSecurityManager securityManager = new DefaultSecurityManager(realm);
 
-SessionDAO sessionDAO = <span class="code-keyword">new</span> 
CustomSessionDAO();
+SessionDAO sessionDAO = new CustomSessionDAO();
 
 
((DefaultSessionManager)securityManager.getSessionManager()).setSessionDAO(sessionDAO);
 ...
-</pre>
-</div></div>
-
-<p>Using direct method invocations, you can configure any part of the 
<tt>SecurityManager</tt>'s object graph.</p>
-
-<p>But, as simple as programmatic customization is, it does not represent the 
ideal configuration for most real world applications.  There are a few reasons 
why programmatic configuration may not be suitable for your application:</p>
-
-<ul><li>It requires you to know about and instantiate a direct implementation. 
 It would be nicer if you didn't have to know about concrete implementations 
and where to find them.
-<br clear="none" class="atl-forced-newline">
-<br clear="none" class="atl-forced-newline"></li><li>Because of Java's 
type-safe nature, you're required to cast objects obtained via <tt>get*</tt> 
methods to their specific implementation.  So much casting is ugly, verbose, 
and tightly-couples you to implementation classes.
-<br clear="none" class="atl-forced-newline">
-<br clear="none" class="atl-forced-newline"></li><li>The 
<tt>SecurityUtils.setSecurityManager</tt> method call makes the instantiated 
<tt>SecurityManager</tt> instance a VM static singleton, which, while fine for 
many applications, would cause problems if more than one Shiro-enabled 
application was running on the same JVM.  It could be better if the instance 
was an application singleton, but not a static memory reference.
-<br clear="none" class="atl-forced-newline">
-<br clear="none" class="atl-forced-newline"></li><li>It requires you to 
recompile your application every time you want to make a Shiro configuration 
change.</li></ul>
-
-
-<p>However, even with these caveats, the direct programmatic manipulation 
approach could still be valuable in memory-constrained environments, like 
smart-phone applications.  If your application does not run in a 
memory-constrained environment, you'll find text-based configuration to be 
easier to use and read.</p>
-
-<h2><a name="Configuration-INIConfiguration"></a>INI Configuration</h2>
-
-<p>Most applications instead benefit from text-based configuration that could 
be modified independently of source code and even make things easier to 
understand for those not intimately familiar with Shiro's APIs.</p>
-
-<p>To ensure a common-denominator text-based configuration mechanism that can 
work in all environments with minimal 3rd party dependencies, Shiro supports 
the <a class="external-link" href="https://en.wikipedia.org/wiki/INI_file"; 
rel="nofollow">INI format</a> to build the <tt>SecurityManager</tt> object 
graph and its supporting components.  INI is easy to read, easy to configure, 
and is simple to set-up and suits most applications well.</p>
-
-<h3><a name="Configuration-CreatingaSecurityManagerfromINI"></a>Creating a 
SecurityManager from INI</h3>
-
+</code></pre>
+<p>Using direct method invocations, you can configure any part of the 
<code>SecurityManager</code>&rsquo;s object graph.</p>
+<p>But, as simple as programmatic customization is, it does not represent the 
ideal configuration for most real world applications. There are a few reasons 
why programmatic configuration may not be suitable for your application:</p>
+<ul>
+  <li>
+  <p>It requires you to know about and instantiate a direct implementation. It 
would be nicer if you didn&rsquo;t have to know about concrete implementations 
and where to find them.</p></li>
+  <li>
+  <p>Because of Java&rsquo;s type-safe nature, you&rsquo;re required to cast 
objects obtained via <code>get*</code> methods to their specific 
implementation. So much casting is ugly, verbose, and tightly-couples you to 
implementation classes.</p></li>
+  <li>
+  <p>The <code>SecurityUtils.setSecurityManager</code> method call makes the 
instantiated <code>SecurityManager</code> instance a VM static singleton, 
which, while fine for many applications, would cause problems if more than one 
Shiro-enabled application was running on the same JVM. It could be better if 
the instance was an application singleton, but not a static memory 
reference.</p></li>
+  <li>
+  <p>It requires you to recompile your application every time you want to make 
a Shiro configuration change.</p></li>
+</ul>
+<p>However, even with these caveats, the direct programmatic manipulation 
approach could still be valuable in memory-constrained environments, like 
smart-phone applications. If your application does not run in a 
memory-constrained environment, you&rsquo;ll find text-based configuration to 
be easier to use and read.</p>
+<a name="Configuration-INIConfiguration"></a>
+<h2><a href="#ini-configuration" name="ini-configuration">INI 
Configuration</a></h2>
+<p>Most applications instead benefit from text-based configuration that could 
be modified independently of source code and even make things easier to 
understand for those not intimately familiar with Shiro&rsquo;s APIs.</p>
+<p>To ensure a common-denominator text-based configuration mechanism that can 
work in all environments with minimal 3rd party dependencies, Shiro supports 
the <a href="https://en.wikipedia.org/wiki/INI_file";>INI format</a> to build 
the <code>SecurityManager</code> object graph and its supporting components. 
INI is easy to read, easy to configure, and is simple to set-up and suits most 
applications well.</p>
+<a name="Configuration-CreatingaSecurityManagerfromINI"></a>
+<h3><a href="#creating-a-securitymanager-from-ini" 
name="creating-a-securitymanager-from-ini">Creating a SecurityManager from 
INI</a></h3>
 <p>Here are two examples of how to build a SecurityManager based on INI 
configuration.</p>
-
-<h4><a 
name="Configuration-SecurityManagerfromanINIresource"></a>SecurityManager from 
an INI resource</h4>
-
-<p>We can create the SecurityManager instance from an INI resource path.  
Resources can be acquired from the file system, classpath, or URLs when 
prefixed with <tt>file:</tt>, <tt>classpath:</tt>, or <tt>url:</tt> 
respectively.  This example uses a <tt>Factory</tt> to ingest a 
<tt>shiro.ini</tt> file from the root of the classpath and return the 
<tt>SecurityManager</tt> instance:</p>
-
-<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
-<pre class="code-java">
-<span class="code-keyword">import</span> org.apache.shiro.SecurityUtils;
-<span class="code-keyword">import</span> org.apache.shiro.util.Factory;
-<span class="code-keyword">import</span> org.apache.shiro.mgt.<span 
class="code-object">SecurityManager</span>;
-<span class="code-keyword">import</span> 
org.apache.shiro.config.IniSecurityManagerFactory;
+<a name="Configuration-SecurityManagerfromanINIresource"></a>
+<h4><a href="#securitymanager-from-an-ini-resource" 
name="securitymanager-from-an-ini-resource">SecurityManager from an INI 
resource</a></h4>
+<p>We can create the SecurityManager instance from an INI resource path. 
Resources can be acquired from the file system, classpath, or URLs when 
prefixed with <code>file:</code>, <code>classpath:</code>, or <code>url:</code> 
respectively. This example uses a <code>Factory</code> to ingest a 
<code>shiro.ini</code> file from the root of the classpath and return the 
<code>SecurityManager</code> instance:</p>
+<pre><code class="java">import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.util.Factory;
+import org.apache.shiro.mgt.SecurityManager;
+import org.apache.shiro.config.IniSecurityManagerFactory;
 
 ...
 
-Factory&lt;<span class="code-object">SecurityManager</span>&gt; factory = 
<span class="code-keyword">new</span> IniSecurityManagerFactory(<span 
class="code-quote">"classpath:shiro.ini"</span>);
-<span class="code-object">SecurityManager</span> securityManager = 
factory.getInstance();
+Factory&lt;SecurityManager&gt; factory = new 
IniSecurityManagerFactory(&quot;classpath:shiro.ini&quot;);
+SecurityManager securityManager = factory.getInstance();
 SecurityUtils.setSecurityManager(securityManager);
-</pre>
-</div></div>
-
-<h4><a 
name="Configuration-SecurityManagerfromanINIinstance"></a>SecurityManager from 
an INI instance</h4>
-
-<p>The INI configuration can be constructed programmatically as well if 
desired via the <tt><a class="external-link" 
href="static/current/apidocs/org/apache/shiro/config/Ini.html">org.apache.shiro.config.Ini</a></tt>
 class.  The Ini class functions similarly to the JDK <tt><a 
class="external-link" 
href="http://download.oracle.com/javase/6/docs/api/java/util/Properties.html"; 
rel="nofollow">java.util.Properties</a></tt> class, but additionally supports 
segmentation by section name.  </p>
-
+</code></pre>
+<a name="Configuration-SecurityManagerfromanINIinstance"></a>
+<h4><a href="#securitymanager-from-an-ini-instance" 
name="securitymanager-from-an-ini-instance">SecurityManager from an INI 
instance</a></h4>
+<p>The INI configuration can be constructed programmatically as well if 
desired via the <a 
href="static/current/apidocs/org/apache/shiro/config/Ini.html"><code>org.apache.shiro.config.Ini</code></a>
 class. The Ini class functions similarly to the JDK <a 
href="http://download.oracle.com/javase/6/docs/api/java/util/Properties.html";><code>java.util.Properties</code></a>
 class, but additionally supports segmentation by section name.</p>
 <p>For example:</p>
-
-<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
-<pre class="code-java">
-<span class="code-keyword">import</span> org.apache.shiro.SecurityUtils;
-<span class="code-keyword">import</span> org.apache.shiro.util.Factory;
-<span class="code-keyword">import</span> org.apache.shiro.mgt.<span 
class="code-object">SecurityManager</span>;
-<span class="code-keyword">import</span> org.apache.shiro.config.Ini;
-<span class="code-keyword">import</span> 
org.apache.shiro.config.IniSecurityManagerFactory;
+<pre><code class="java">import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.util.Factory;
+import org.apache.shiro.mgt.SecurityManager;
+import org.apache.shiro.config.Ini;
+import org.apache.shiro.config.IniSecurityManagerFactory;
 
 ...
 
-Ini ini = <span class="code-keyword">new</span> Ini();
-<span class="code-comment">//populate the Ini instance as necessary
-</span>...
-Factory&lt;<span class="code-object">SecurityManager</span>&gt; factory = 
<span class="code-keyword">new</span> IniSecurityManagerFactory(ini);
-<span class="code-object">SecurityManager</span> securityManager = 
factory.getInstance();
+Ini ini = new Ini();
+//populate the Ini instance as necessary
+...
+Factory&lt;SecurityManager&gt; factory = new IniSecurityManagerFactory(ini);
+SecurityManager securityManager = factory.getInstance();
 SecurityUtils.setSecurityManager(securityManager);
-</pre>
-</div></div>
-
-<p>Now that we know how to construct a <tt>SecurityManager</tt> from INI 
configuration, let's take a look at exactly how to define a Shiro INI 
configuration.</p>
-
-<h3><a name="Configuration-INISections"></a>INI Sections</h3>
-
-<p>INI is basically a text configuration consisting of key/value pairs 
organized by uniquely-named sections.  Keys are unique per section only, not 
over the entire configuration (unlike the JDK  <a class="external-link" 
href="http://java.sun.com/javase/6/docs/api/java/util/Properties.html"; 
rel="nofollow">Properties</a>).  Each section may be viewed like a single 
<tt>Properties</tt> definition however.</p>
-
-<p>Commented lines can start with either with an Octothorpe (# - aka the 
'hash', 'pound' or 'number' sign) or a Semi-colon (';')</p>
-
+</code></pre>
+<p>Now that we know how to construct a <code>SecurityManager</code> from INI 
configuration, let&rsquo;s take a look at exactly how to define a Shiro INI 
configuration.</p>
+<a name="Configuration-INISections"></a>
+<h3><a href="#ini-sections" name="ini-sections">INI Sections</a></h3>
+<p>INI is basically a text configuration consisting of key/value pairs 
organized by uniquely-named sections. Keys are unique per section only, not 
over the entire configuration (unlike the JDK <a 
href="http://java.sun.com/javase/6/docs/api/java/util/Properties.html";>Properties</a>).
 Each section may be viewed like a single <code>Properties</code> definition 
however.</p>
+<p>Commented lines can start with either with an Octothorpe (# - aka the 
&lsquo;hash&rsquo;, &lsquo;pound&rsquo; or &lsquo;number&rsquo; sign) or a 
Semi-colon (&lsquo;;&rsquo;)</p>
 <p>Here is an example of the sections understood by Shiro:</p>
-
-<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
-<pre class="code-java">
-# =======================
+<pre><code class="ini"># =======================
 # Shiro INI configuration
 # =======================
 
 [main]
-# Objects and their properties are defined here, 
+# Objects and their properties are defined here,
 # Such as the securityManager, Realms and anything
-# <span class="code-keyword">else</span> needed to build the <span 
class="code-object">SecurityManager</span>
+# else needed to build the SecurityManager
 
 [users]
-# The 'users' section is <span class="code-keyword">for</span> simple 
deployments
-# when you only need a small number of statically-defined 
+# The &#39;users&#39; section is for simple deployments
+# when you only need a small number of statically-defined
 # set of User accounts.
 
 [roles]
-# The 'roles' section is <span class="code-keyword">for</span> simple 
deployments
+# The &#39;roles&#39; section is for simple deployments
 # when you only need a small number of statically-defined
 # roles.
 
 [urls]
-# The 'urls' section is used <span class="code-keyword">for</span> url-based 
security
-# in web applications.  We'll discuss <span class="code-keyword">this</span> 
section in the
+# The &#39;urls&#39; section is used for url-based security
+# in web applications.  We&#39;ll discuss this section in the
 # Web documentation
-</pre>
-</div></div>
-
-<h4><a name="Configuration-%5Cmain%5C"></a>[main]</h4>
-
-<p>The <tt><b>[main]</b></tt> section is where you configure the application's 
<tt>SecurityManager</tt> instance and any of its dependencies, such as <a 
href="realm.html" title="Realm">Realm</a>s.</p>
-
-<p>Configuring object instances like the SecurityManager or any of its 
dependencies sounds like a difficult thing to do with INI, where we can only 
use name/value pairs.  But through a little bit of convention and understanding 
of object graphs, you'll find that you can do quite a lot.  Shiro uses these 
assumptions to enable a simple yet fairly concise configuration mechanism.</p>
-
-<p>We often like to refer to this approach as "poor man's" Dependency 
Injection, and although not as powerful as full-blown Spring/Guice/JBoss XML 
files, you'll find it gets quite a lot done without much complexity.  Of course 
those other configuration mechanism are available as well, but they're not 
required to use Shiro.</p>
-
-<p>Just to whet your appetite, here is an example of a valid <tt>[main]</tt> 
configuration.  We'll cover it in detail below, but you might find that you 
understand quite a bit of what is going on already by intuition alone:</p>
-
-<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
-<pre class="code-java">
-[main]
+</code></pre>
+<a name="Configuration-%5Cmain%5C"></a>
+<h4>[main]</h4>
+<p>The <strong><code>[main]</code></strong> section is where you configure the 
application&rsquo;s <code>SecurityManager</code> instance and any of its 
dependencies, such as <a href="realm.html" title="Realm">Realm</a>s.</p>
+<p>Configuring object instances like the SecurityManager or any of its 
dependencies sounds like a difficult thing to do with INI, where we can only 
use name/value pairs. But through a little bit of convention and understanding 
of object graphs, you&rsquo;ll find that you can do quite a lot. Shiro uses 
these assumptions to enable a simple yet fairly concise configuration 
mechanism.</p>
+<p>We often like to refer to this approach as &ldquo;poor man&rsquo;s&rdquo; 
Dependency Injection, and although not as powerful as full-blown 
Spring/Guice/JBoss XML files, you&rsquo;ll find it gets quite a lot done 
without much complexity. Of course those other configuration mechanism are 
available as well, but they&rsquo;re not required to use Shiro.</p>
+<p>Just to whet your appetite, here is an example of a valid 
<code>[main]</code> configuration. We&rsquo;ll cover it in detail below, but 
you might find that you understand quite a bit of what is going on already by 
intuition alone:</p>
+<pre><code class="ini">[main]
 sha256Matcher = org.apache.shiro.authc.credential.Sha256CredentialsMatcher
 
 myRealm = com.company.security.shiro.DatabaseRealm
@@ -270,93 +289,55 @@ myRealm.password = secret
 myRealm.credentialsMatcher = $sha256Matcher
 
 securityManager.sessionManager.globalSessionTimeout = 1800000
-</pre>
-</div></div>
-
-<h5><a name="Configuration-Defininganobject"></a>Defining an object</h5>
-
-<p>Consider the following <tt>[main]</tt> section snippet:</p>
-
-<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
-<pre class="code-java">
-[main]
+</code></pre>
+<a name="Configuration-Defininganobject"></a>
+<h5><a href="#defining-an-object" name="defining-an-object">Defining an 
object</a></h5>
+<p>Consider the following <code>[main]</code> section snippet:</p>
+<pre><code class="ini">[main]
 myRealm = com.company.shiro.realm.MyRealm
 ...
-</pre>
-</div></div>
-
-<p>This line instantiates a new object instance of type 
<tt>com.company.shiro.realm.MyRealm</tt> and makes that object available under 
the <b>myRealm</b> name for further reference and configuration.</p>
-
-<p>If the object instantiated implements the 
<tt>org.apache.shiro.util.Nameable</tt> interface, then the the 
<tt>Nameable.setName</tt> method will be invoked on the object with the name 
value (<b>myRealm</b> in this example).</p>
-
-<h5><a name="Configuration-Settingobjectproperties"></a>Setting object 
properties</h5>
-
-<h6><a name="Configuration-PrimitiveValues"></a>Primitive Values</h6>
-
+</code></pre>
+<p>This line instantiates a new object instance of type 
<code>com.company.shiro.realm.MyRealm</code> and makes that object available 
under the <strong>myRealm</strong> name for further reference and 
configuration.</p>
+<p>If the object instantiated implements the 
<code>org.apache.shiro.util.Nameable</code> interface, then the the 
<code>Nameable.setName</code> method will be invoked on the object with the 
name value ( <strong><code>myRealm</code></strong> in this example).</p>
+<a name="Configuration-Settingobjectproperties"></a>
+<h5><a href="#setting-object-properties" 
name="setting-object-properties">Setting object properties</a></h5>
+<a name="Configuration-PrimitiveValues"></a>
+<h6><a href="#primitive-values" name="primitive-values">Primitive 
Values</a></h6>
 <p>Simple primitive properties can be assigned just by using the equals 
sign:</p>
-
-<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
-<pre class="code-java">
-...
+<pre><code class="ini">...
 myRealm.connectionTimeout = 30000
 myRealm.username = jsmith
 ...
-</pre>
-</div></div>
-
+</code></pre>
 <p>these lines of configuration translate into method calls:</p>
-
-<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
-<pre class="code-java">
-...
+<pre><code class="ini">...
 myRealm.setConnectionTimeout(30000);
-myRealm.setUsername(<span class="code-quote">"jsmith"</span>);
-...
-</pre>
-</div></div>
-
-<p>How is this possible?  It assumes that all objects are <a 
class="external-link" href="https://en.wikipedia.org/wiki/JavaBean"; 
rel="nofollow">Java Beans</a>-compatible <a class="external-link" 
href="https://en.wikipedia.org/wiki/Plain_Old_Java_Object"; 
rel="nofollow">POJO</a>s.</p>
-
-<p>Under the covers, Shiro by default uses Apache Commons <a 
class="external-link" 
href="http://commons.apache.org/proper/commons-beanutils/";>BeanUtils</a> to do 
all the heavy lifting when setting these properties.  So although INI values 
are text, BeanUtils knows how to convert the string values to the proper 
primitive types and then invoke the corresponding JavaBeans setter method.</p>
-
-<h6><a name="Configuration-ReferenceValues"></a>Reference Values</h6>
-
-<p>What if the value you need to set is not a primitive, but another object?  
Well, you can use a dollar sign ($) to reference a previously-defined instance. 
 For example:</p>
-
-<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
-<pre class="code-java">
+myRealm.setUsername(&quot;jsmith&quot;);
 ...
+</code></pre>
+<p>How is this possible? It assumes that all objects are <a 
href="https://en.wikipedia.org/wiki/JavaBean";>Java Beans</a>-compatible <a 
href="https://en.wikipedia.org/wiki/Plain_Old_Java_Object";>POJO</a>s.</p>
+<p>Under the covers, Shiro by default uses Apache Commons <a 
href="http://commons.apache.org/proper/commons-beanutils/";>BeanUtils</a> to do 
all the heavy lifting when setting these properties. So although INI values are 
text, BeanUtils knows how to convert the string values to the proper primitive 
types and then invoke the corresponding JavaBeans setter method.</p>
+<a name="Configuration-ReferenceValues"></a>
+<h6><a href="#reference-values" name="reference-values">Reference 
Values</a></h6>
+<p>What if the value you need to set is not a primitive, but another object? 
Well, you can use a dollar sign ($) to reference a previously-defined instance. 
For example:</p>
+<pre><code class="java">...
 sha256Matcher = org.apache.shiro.authc.credential.Sha256CredentialsMatcher
 ...
 myRealm.credentialsMatcher = $sha256Matcher
 ...
-</pre>
-</div></div>
-
-<p>This simply locates the object defined by the name <b>sha256Matcher</b> and 
then uses BeanUtils to set that object on the <b>myRealm</b> instance (by 
calling the <tt>myRealm.setCredentialsMatcher(sha256Matcher)</tt> method).</p>
-
-<h6><a name="Configuration-NestedProperties"></a>Nested Properties</h6>
-
-<p>Using dotted notation on the left side of the INI line's equals sign, you 
can traverse an object graph to get to the final object/property that you want 
set.  For example, this config line:</p>
-
-<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
-<pre class="code-java">
-...
+</code></pre>
+<p>This simply locates the object defined by the name 
<strong>sha256Matcher</strong> and then uses BeanUtils to set that object on 
the <strong>myRealm</strong> instance (by calling the 
<code>myRealm.setCredentialsMatcher(sha256Matcher)</code> method).</p>
+<a name="Configuration-NestedProperties"></a>
+<h6><a href="#nested-properties" name="nested-properties">Nested 
Properties</a></h6>
+<p>Using dotted notation on the left side of the INI line&rsquo;s equals sign, 
you can traverse an object graph to get to the final object/property that you 
want set. For example, this config line:</p>
+<pre><code class="java">...
 securityManager.sessionManager.globalSessionTimeout = 1800000
 ...
-</pre>
-</div></div>
-
+</code></pre>
 <p>Translates (by BeanUtils) into the following logic:</p>
-
-<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
-<pre class="code-java">
-securityManager.getSessionManager().setGlobalSessionTimeout(1800000);
-</pre>
-</div></div>
-
-<p>The graph traversal can be as deep as necessary: 
<tt>object.property1.property2....propertyN.value = blah</tt></p>
-
+<pre><code 
class="java">securityManager.getSessionManager().setGlobalSessionTimeout(1800000);
+</code></pre>
+<p>The graph traversal can be as deep as necessary: 
<code>object.property1.property2....propertyN.value = blah</code></p>
 <div class="panelMacro">
     <table class="tipMacro">
         <colgroup span="1">
@@ -376,73 +357,45 @@ securityManager.getSessionManager().setG
         </tbody>
     </table>
 </div>
-
-<h6><a name="Configuration-ByteArrayValues"></a>Byte Array Values</h6>
-
-<p>Because raw byte arrays can't be specified natively in a text format, we 
must use a text encoding of the byte array.  The values can be specified either 
as a Base64 encoded string (the default) or as a Hex encoded string.  The 
default is Base64 because Base64 encoding requires less actual text to 
represent values - it has a larger encoding alphabet, meaning your tokens are 
shorter (a bit nicer for text config).</p>
-
-<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
-<pre class="code-java">
-# The 'cipherKey' attribute is a <span class="code-object">byte</span> array.  
  By <span class="code-keyword">default</span>, text values 
-# <span class="code-keyword">for</span> all <span 
class="code-object">byte</span> array properties are expected to be Base64 
encoded:
+<a name="Configuration-ByteArrayValues"></a>
+<h6><a href="#byte-array-values" name="byte-array-values">Byte Array 
Values</a></h6>
+<p>Because raw byte arrays can&rsquo;t be specified natively in a text format, 
we must use a text encoding of the byte array. The values can be specified 
either as a Base64 encoded string (the default) or as a Hex encoded string. The 
default is Base64 because Base64 encoding requires less actual text to 
represent values - it has a larger encoding alphabet, meaning your tokens are 
shorter (a bit nicer for text config).</p>
+<pre><code class="ini"># The &#39;cipherKey&#39; attribute is a byte array.    
By default, text values
+# for all byte array properties are expected to be Base64 encoded:
 
 securityManager.rememberMeManager.cipherKey = kPH+bIxk5D2deZiIxcaaaA==
 ...
-</pre>
-</div></div>
-
-<p>However, if you prefer to use Hex encoding instead, you must prefix the 
String token with <tt>0x</tt> ('zero' 'x'):</p>
-
-<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
-<pre class="code-java">
-securityManager.rememberMeManager.cipherKey = 0x3707344A4093822299F31D008
-</pre>
-</div></div>
-
-<h6><a name="Configuration-CollectionProperties"></a>Collection Properties</h6>
-
-<p>Lists, Sets and Maps can be set like any other property - either directly 
or as a nested property.  For sets and lists, just specify a comma-delimited 
set of values or object references.</p>
-
+</code></pre>
+<p>However, if you prefer to use Hex encoding instead, you must prefix the 
String token with <code>0x</code> (&lsquo;zero&rsquo; &lsquo;x&rsquo;):</p>
+<pre><code class="ini">securityManager.rememberMeManager.cipherKey = 
0x3707344A4093822299F31D008
+</code></pre>
+<a name="Configuration-CollectionProperties"></a>
+<h6><a href="#collection-properties" name="collection-properties">Collection 
Properties</a></h6>
+<p>Lists, Sets and Maps can be set like any other property - either directly 
or as a nested property. For sets and lists, just specify a comma-delimited set 
of values or object references.</p>
 <p>For example, some SessionListeners:</p>
-
-<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
-<pre class="code-java">
-sessionListener1 = com.company.my.SessionListenerImplementation
+<pre><code class="ini">sessionListener1 = 
com.company.my.SessionListenerImplementation
 ...
 sessionListener2 = com.company.my.other.SessionListenerImplementation
 ...
 securityManager.sessionManager.sessionListeners = $sessionListener1, 
$sessionListener2
-</pre>
-</div></div>
-
-<p>For Maps, you specify a comma-delimited list of key-value pairs, where each 
key-value pair is delimited by a colon ':'</p>
-
-<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
-<pre class="code-java">
-object1 = com.company.some.<span class="code-object">Class</span>
-object2 = com.company.another.<span class="code-object">Class</span>
+</code></pre>
+<p>For Maps, you specify a comma-delimited list of key-value pairs, where each 
key-value pair is delimited by a colon &lsquo;:&rsquo;</p>
+<pre><code class="ini">object1 = com.company.some.Class
+object2 = com.company.another.Class
 ...
 anObject = some.class.with.a.Map.property
 
 anObject.mapProperty = key1:$object1, key2:$object2
-</pre>
-</div></div>
-
-<p>In the above example, the object referenced by <tt>$object1</tt> will be in 
the map under the String key <tt>key1</tt>, i.e. <tt>map.get("key1")</tt> 
returns <tt>object1</tt>.  You can also use other objects as the keys:</p>
-
-<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
-<pre class="code-java">
-anObject.map = $objectKey1:$objectValue1, $objectKey2:$objectValue2
-...
-</pre>
-</div></div>
-
-<h5><a name="Configuration-Considerations"></a>Considerations</h5>
-
-<h6><a name="Configuration-OrderMatters"></a>Order Matters</h6>
-
-<p>The INI format and conventions above are very convenient and easy to 
understand, but it is not as powerful as other text/XML-based configuration 
mechanisms.  The most important thing to understand when using the above 
mechanism is that <b>Order Matters!</b></p>
-
+</code></pre>
+<p>In the above example, the object referenced by <code>$object1</code> will 
be in the map under the String key <code>key1</code>, i.e. 
<code>map.get(&quot;key1&quot;)</code> returns <code>object1</code>. You can 
also use other objects as the keys:</p>
+<pre><code class="ini">anObject.map = $objectKey1:$objectValue1, 
$objectKey2:$objectValue2
+...
+</code></pre>
+<a name="Configuration-Considerations"></a>
+<h5><a href="#considerations" name="considerations">Considerations</a></h5>
+<a name="Configuration-OrderMatters"></a>
+<h6><a href="#order-matters" name="order-matters">Order Matters</a></h6>
+<p>The INI format and conventions above are very convenient and easy to 
understand, but it is not as powerful as other text/XML-based configuration 
mechanisms. The most important thing to understand when using the above 
mechanism is that <strong>Order Matters!</strong></p>
 <div class="panelMacro">
     <table class="noteMacro">
         <colgroup span="1">
@@ -465,63 +418,39 @@ anObject.map = $objectKey1:$objectValue1
         </tbody>
     </table>
 </div>
-
-<h6><a name="Configuration-OverridingInstances"></a>Overriding Instances</h6>
-
-<p>Any object can be overridden by a new instance defined later in the 
configuration.  So for example, the 2nd <tt>myRealm</tt> definition would 
overwrite the first:</p>
-
-<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
-<pre class="code-java">
-...
+<a name="Configuration-OverridingInstances"></a>
+<h6><a href="#overriding-instances" name="overriding-instances">Overriding 
Instances</a></h6>
+<p>Any object can be overridden by a new instance defined later in the 
configuration. So for example, the 2nd <code>myRealm</code> definition would 
overwrite the first:</p>
+<pre><code class="ini">...
 myRealm = com.company.security.MyRealm
 ...
 myRealm = com.company.security.DatabaseRealm
 ...
-</pre>
-</div></div>
-
-<p>This would result in <tt>myRealm</tt> being a 
<tt>com.company.security.DatabaseRealm</tt> instance and the previous instance 
will never be used (and garbage collected).</p>
-
-<h6><a name="Configuration-DefaultSecurityManager"></a>Default 
SecurityManager</h6>
-
-<p>You may have noticed in the complete example above that the SecurityManager 
instance's class isn't defined, and we jumped right in to just setting a nested 
property:</p>
-
-<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
-<pre class="code-java">
-myRealm = ...
+</code></pre>
+<p>This would result in <code>myRealm</code> being a 
<code>com.company.security.DatabaseRealm</code> instance and the previous 
instance will never be used (and garbage collected).</p>
+<a name="Configuration-DefaultSecurityManager"></a>
+<h6><a href="#default-securitymanager" name="default-securitymanager">Default 
SecurityManager</a></h6>
+<p>You may have noticed in the complete example above that the SecurityManager 
instance&rsquo;s class isn&rsquo;t defined, and we jumped right in to just 
setting a nested property:</p>
+<pre><code class="ini">myRealm = ...
 
 securityManager.sessionManager.globalSessionTimeout = 1800000
 ...
-</pre>
-</div></div>
-
-<p>This is because the <tt>securityManager</tt> instance is a special one - it 
is already instantiated for you and ready to go so you don't need to know the 
specific <tt>SecurityManager</tt> implementation class to instantiate.</p>
-
-<p>Of course, if you actually <em>want</em> to specify your own 
implementation, you can, just define your implementation as specified in the 
"Overriding Instances" section above:</p>
-
-<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
-<pre class="code-java">
-...
+</code></pre>
+<p>This is because the <code>securityManager</code> instance is a special one 
- it is already instantiated for you and ready to go so you don&rsquo;t need to 
know the specific <code>SecurityManager</code> implementation class to 
instantiate.</p>
+<p>Of course, if you actually <em>want</em> to specify your own 
implementation, you can, just define your implementation as specified in the 
&ldquo;Overriding Instances&rdquo; section above:</p>
+<pre><code class="ini">...
 securityManager = com.company.security.shiro.MyCustomSecurityManager
 ...
-</pre>
-</div></div>
-
-<p>Of course, this is rarely needed - Shiro's SecurityManager implementations 
are very customizable and can typically be configured with anything necessary.  
You might want to ask yourself (or the user list) if you really need to do 
this.<br clear="none">
-<a href="#Configuration-users">users</a></p>
-<h4><a name="Configuration-%5Cusers%5C"></a>[users]</h4>
-
-<p>The <tt><b>[users]</b></tt> section allows you to define a static set of 
user accounts.  This is mostly useful in environments with a very small number 
of user accounts or where user accounts don't need to be created dynamically at 
runtime.  Here's an example:</p>
-
-<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
-<pre class="code-java">
-[users]
+</code></pre>
+<p>Of course, this is rarely needed - Shiro&rsquo;s SecurityManager 
implementations are very customizable and can typically be configured with 
anything necessary. You might want to ask yourself (or the user list) if you 
really need to do this.<br/><a href="#Configuration-users">users</a></p>
+<a name="Configuration-%5Cusers%5C"></a>
+<h4>[users]</h4>
+<p>The <strong><code>[users]</code></strong> section allows you to define a 
static set of user accounts. This is mostly useful in environments with a very 
small number of user accounts or where user accounts don&rsquo;t need to be 
created dynamically at runtime. Here&rsquo;s an example:</p>
+<pre><code class="ini">[users]
 admin = secret
 lonestarr = vespa, goodguy, schwartz
 darkhelmet = ludicrousspeed, badguy, schwartz
-</pre>
-</div></div>
-
+</code></pre>
 <div class="panelMacro">
     <table class="infoMacro">
         <colgroup span="1">
@@ -539,26 +468,24 @@ darkhelmet = ludicrousspeed, badguy, sch
             <td colspan="1" rowspan="1">
                 <b>Automatic IniRealm</b>
                 <br clear="none">
-                Just defining non-empty [users] or [roles] sections will 
automatically trigger the creation of an <tt><a class="external-link" 
href="static/current/apidocs/org/apache/shiro/realm/text/IniRealm.html">org.apache.shiro.realm.text.IniRealm</a></tt>
 instance and make it available in the [main] section under the name 
<tt><b>iniRealm</b></tt>.  You can configure it like any other object as 
described above.
+                Just defining non-empty [users] or [roles] sections will 
automatically trigger the creation of an <a class="external-link" 
href="static/current/apidocs/org/apache/shiro/realm/text/IniRealm.html"><code>org.apache.shiro.realm.text.IniRealm</code></a>
 instance and make it available in the [main] section under the name 
<b><code>iniRealm</code></b>.  You can configure it like any other object as 
described above.
             </td>
         </tr>
         </tbody>
     </table>
 </div>
-
-<h5><a name="Configuration-LineFormat"></a>Line Format</h5>
-
+<a name="Configuration-LineFormat"></a>
+<h5><a href="#line-format" name="line-format">Line Format</a></h5>
 <p>Each line in the [users] section must conform to the following format:</p>
-
-<p><tt>username</tt> = <tt>password</tt>, <em>roleName1</em>, 
<em>roleName2</em>, ..., <em>roleNameN</em></p>
-
-<ul><li>The value on the left of the equals sign is the username</li><li>The 
first value on the right of the equals sign is the user's password.  A password 
is required.</li><li>Any comma-delimited values after the password are the 
names of roles assigned to that user.  Role names are optional.</li></ul>
-
-
-<h5><a name="Configuration-EncryptingPasswords"></a>Encrypting Passwords</h5>
-
-<p>If you don't want the [users] section passwords to be in plain-text, you 
can encrypt them using your favorite hash algorithm (MD5, Sha1, Sha256, etc) 
however you like and use the resulting string as the password value.  By 
default, the password string is expected to be Hex encoded, but can be 
configured to be Base64 encoded instead (see below).</p>
-
+<p><code>username</code> = <code>password</code>, <em>roleName1</em>, 
<em>roleName2</em>, &hellip;, <em>roleNameN</em></p>
+<ul>
+  <li>The value on the left of the equals sign is the username</li>
+  <li>The first value on the right of the equals sign is the user&rsquo;s 
password. A password is required.</li>
+  <li>Any comma-delimited values after the password are the names of roles 
assigned to that user. Role names are optional.</li>
+</ul>
+<a name="Configuration-EncryptingPasswords"></a>
+<h5><a href="#encrypting-passwords" name="encrypting-passwords">Encrypting 
Passwords</a></h5>
+<p>If you don&rsquo;t want the [users] section passwords to be in plain-text, 
you can encrypt them using your favorite hash algorithm (MD5, Sha1, Sha256, 
etc) however you like and use the resulting string as the password value. By 
default, the password string is expected to be Hex encoded, but can be 
configured to be Base64 encoded instead (see below).</p>
 <div class="panelMacro">
     <table class="tipMacro">
         <colgroup span="1">
@@ -572,18 +499,14 @@ darkhelmet = ludicrousspeed, badguy, sch
             <td colspan="1" rowspan="1">
                 <b>Easy Secure Passwords</b>
                 <br clear="none">
-                To save time and use best-practices, you might want to use 
Shiro's <a href="command-line-hasher.html" title="Command Line Hasher">Command 
Line Hasher</a>, which will hash passwords as well as any other type of 
resource.  It is especially convenient for encrypting INI <tt>[users]</tt> 
passwords.
+                To save time and use best-practices, you might want to use 
Shiro's <a href="command-line-hasher.html" title="Command Line Hasher">Command 
Line Hasher</a>, which will hash passwords as well as any other type of 
resource.  It is especially convenient for encrypting INI <code>[users]</code> 
passwords.
             </td>
         </tr>
         </tbody>
     </table>
 </div>
-
-<p>Once you've specified the hashed text password values, you have to tell 
Shiro that these are encrypted.  You do that by configuring the implicitly 
created <tt>iniRealm</tt> in the [main] section to use an appropriate 
<tt>CredentialsMatcher</tt> implementation corresponding to the hash algorithm 
you've specified:</p>
-
-<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
-<pre class="code-java">
-[main]
+<p>Once you&rsquo;ve specified the hashed text password values, you have to 
tell Shiro that these are encrypted. You do that by configuring the implicitly 
created <code>iniRealm</code> in the [main] section to use an appropriate 
<code>CredentialsMatcher</code> implementation corresponding to the hash 
algorithm you&rsquo;ve specified:</p>
+<pre><code class="ini">[main]
 ...
 sha256Matcher = org.apache.shiro.authc.credential.Sha256CredentialsMatcher
 ...
@@ -592,49 +515,32 @@ iniRealm.credentialsMatcher = $sha256Mat
 
 [users]
 # user1 = sha256-hashed-hex-encoded password, role1, role2, ...
-user1 = 2bb80d537b1da3e38bd30361aa855686bde0eacd7162fef6a25fe97bf527a25b, 
role1, role2, ... 
-</pre>
-</div></div>
-
-<p>You can configure any properties on the <tt>CredentialsMatcher</tt> like 
any other object to reflect your hashing strategy, for example, to specify if 
salting is used or how many hash iterations to execute.  See the <tt><a 
class="external-link" 
href="static/current/apidocs/org/apache/shiro/authc/credential/HashedCredentialsMatcher.html">org.apache.shiro.authc.credential.HashedCredentialsMatcher</a></tt>
 JavaDoc to better understand hashing strategies and if they might be useful to 
you.  </p>
-
-<p>For example, if your users' password strings were Base64 encoded instead of 
the default Hex, you could specify:</p>
-
-<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
-<pre class="code-java">
-[main]
-...
-# <span class="code-keyword">true</span> = hex, <span 
class="code-keyword">false</span> = base64:
-sha256Matcher.storedCredentialsHexEncoded = <span 
class="code-keyword">false</span>
-</pre>
-</div></div>
-
-<h4><a name="Configuration-%5Croles%5C"></a>[roles]</h4>
-
-<p>The <tt><b>[roles]</b></tt> section allows you to associate <a 
href="permissions.html" title="Permissions">Permissions</a> with the roles 
defined in the [users] section.  Again, this is useful in environments with a 
small number of roles or where roles don't need to be created dynamically at 
runtime.  Here's an example:</p>
-
-<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
-<pre class="code-java">
-[roles]
-# 'admin' role has all permissions, indicated by the wildcard '*'
+user1 = 2bb80d537b1da3e38bd30361aa855686bde0eacd7162fef6a25fe97bf527a25b, 
role1, role2, ...
+</code></pre>
+<p>You can configure any properties on the <code>CredentialsMatcher</code> 
like any other object to reflect your hashing strategy, for example, to specify 
if salting is used or how many hash iterations to execute. See the <a 
href="static/current/apidocs/org/apache/shiro/authc/credential/HashedCredentialsMatcher.html"><code>org.apache.shiro.authc.credential.HashedCredentialsMatcher</code></a>
 JavaDoc to better understand hashing strategies and if they might be useful to 
you.</p>
+<p>For example, if your users&rsquo; password strings were Base64 encoded 
instead of the default Hex, you could specify:</p>
+<pre><code class="ini">[main]
+...
+# true = hex, false = base64:
+sha256Matcher.storedCredentialsHexEncoded = false
+</code></pre>
+<a name="Configuration-%5Croles%5C"></a>
+<h4>[roles]</h4>
+<p>The <code>**[roles]**</code> section allows you to associate <a 
href="permissions.html" title="Permissions">Permissions</a> with the roles 
defined in the [users] section. Again, this is useful in environments with a 
small number of roles or where roles don&rsquo;t need to be created dynamically 
at runtime. Here&rsquo;s an example:</p>
+<pre><code class="ini">[roles]
+# &#39;admin&#39; role has all permissions, indicated by the wildcard 
&#39;*&#39;
 admin = *
-# The 'schwartz' role can <span class="code-keyword">do</span> anything (*) 
with any lightsaber:
+# The &#39;schwartz&#39; role can do anything (*) with any lightsaber:
 schwartz = lightsaber:*
-# The 'goodguy' role is allowed to 'drive' (action) the winnebago (type) with
-# license plate 'eagle5' (instance specific id)
+# The &#39;goodguy&#39; role is allowed to &#39;drive&#39; (action) the 
winnebago (type) with
+# license plate &#39;eagle5&#39; (instance specific id)
 goodguy = winnebago:drive:eagle5
-</pre>
-</div></div>
-
-<h5><a name="Configuration-LineFormat"></a>Line Format</h5>
-
+</code></pre>
+<a name="Configuration-LineFormat"></a>
+<h5><a href="#line-format" name="line-format">Line Format</a></h5>
 <p>Each line in the [roles] section must must define a role-to-permission(s) 
key/value mapping with in the following format:</p>
-
-<p><tt>rolename</tt> = <em>permissionDefinition1</em>, 
<em>permissionDefinition2</em>, ..., <em>permissionDefinitionN</em></p>
-
-<p>where <em>permissionDefinition</em> is an arbitrary String, but most people 
will want to use strings that conform<br clear="none">
-to the <tt><a class="external-link" 
href="static/current/apidocs/org/apache/shiro/authz/permission/WildcardPermission.html">org.apache.shiro.authz.permission.WildcardPermission</a></tt>
 format for ease of use and flexibility.  See the <a href="permissions.html" 
title="Permissions">Permissions</a> documentation for more information on 
Permissions and how you can benefit from them. </p>
-
+<p><code>rolename</code> = <em>permissionDefinition1</em>, 
<em>permissionDefinition2</em>, &hellip;, <em>permissionDefinitionN</em></p>
+<p>where <em>permissionDefinition</em> is an arbitrary String, but most people 
will want to use strings that conform<br/>to the <a 
href="static/current/apidocs/org/apache/shiro/authz/permission/WildcardPermission.html"><code>org.apache.shiro.authz.permission.WildcardPermission</code></a>
 format for ease of use and flexibility. See the <a href="permissions.html" 
title="Permissions">Permissions</a> documentation for more information on 
Permissions and how you can benefit from them.</p>
 <div class="panelMacro">
     <table class="infoMacro">
         <colgroup span="1">
@@ -652,13 +558,12 @@ to the <tt><a class="external-link" href
             <td colspan="1" rowspan="1">
                 <b>Internal commas</b>
                 <br clear="none">
-                Note that if an individual <em>permissionDefinition</em> needs 
to be internally comma-delimited (e.g. <tt>printer:5thFloor:print,info</tt>), 
you will need to surround that definition with double quotes (") to avoid 
parsing errors:<br clear="none"><tt>"printer:5thFloor:print,info"</tt>
+                Note that if an individual <em>permissionDefinition</em> needs 
to be internally comma-delimited (e.g. 
<code>printer:5thFloor:print,info</code>), you will need to surround that 
definition with double quotes (") to avoid parsing 
errors:<code>"printer:5thFloor:print,info"</code>
             </td>
         </tr>
         </tbody>
     </table>
 </div>
-
 <div class="panelMacro">
     <table class="tipMacro">
         <colgroup span="1">
@@ -678,16 +583,13 @@ to the <tt><a class="external-link" href
         </tbody>
     </table>
 </div>
-
-<h4><a name="Configuration-%5Curls%5C"></a>[urls]</h4>
-
+<a name="Configuration-%5Curls%5C"></a>
+<h4>[urls]</h4>
 <p>This section and its options is described in the <a href="web.html" 
title="Web">Web</a> chapter.</p>
-
-<h2><a name="Configuration-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>
+<a name="Configuration-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" title="Mailing Lists">User Mailing List</a>.</p>
 
         </div>
 

Modified: shiro/site/publish/contribute.html
URL: 
http://svn.apache.org/viewvc/shiro/site/publish/contribute.html?rev=1766414&r1=1766413&r2=1766414&view=diff
==============================================================================
--- shiro/site/publish/contribute.html (original)
+++ shiro/site/publish/contribute.html Mon Oct 24 14:33:52 2016
@@ -78,25 +78,21 @@
 
         <div id="content">
 
-            <h1><a 
name="Contribute-ContributingtoApacheShiro"></a>Contributing to Apache 
Shiro</h1>
-
+            <a name="Contribute-ContributingtoApacheShiro"></a>
+<h1><a href="#contributing-to-apache-shiro" 
name="contributing-to-apache-shiro">Contributing to Apache Shiro</a></h1>
 <p>Apache Shiro is a non-profit project and relies on your help and 
contributions in order to evolve and improve.</p>
-
-<p>At the Shiro project we make it easy for anyone to join our great community 
and lend a hand.  We welcome any help you can offer inlcuding help with 
documentation, identifying bugs, providing answers on the user mailing list, 
and providing helpful code improvements.</p>
-
+<p>At the Shiro project we make it easy for anyone to join our great community 
and lend a hand. We welcome any help you can offer inlcuding help with 
documentation, identifying bugs, providing answers on the user mailing list, 
and providing helpful code improvements.</p>
 <p>Below are helpful links on how you can contribute to the Apache Shiro 
project.</p>
-
-<ul class="alternate" type="square"><li><b><a href="how-to-contribute.html" 
title="How to Contribute">How to Contribute</a></b> - A starting point for 
contributing to the Shiro project</li></ul>
-
-
-<ul class="alternate" type="square"><li><b><a class="external-link" 
href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20SHIRO%20AND%20status%20%3D%20Open%20ORDER%20BY%20priority%20DESC";>Shiro
 Issue Tracker</a></b> - Once you're ready to contribute, this is a good place 
to see what needs to get done</li></ul>
-
-
-<ul class="alternate" type="square"><li><b><a class="external-link" 
href="http://www.apache.org/foundation/sponsorship.html";>Donate to ASF</a></b> 
- Shiro is a project under the Apache Software Foundation, a non-profit that 
relies on donations and community support</li></ul>
-
-
-<ul class="alternate" type="square"><li><b><a href="developer-resources.html" 
title="Developer Resources">Developer Resources</a></b> - Helpful information 
for anyone providing project help as a committer or contributor</li></ul>
-
+<ul>
+  <li>
+  <p><a href="how-to-contribute.html">How to Contribute</a> - A starting point 
for contributing to the Shiro project</p></li>
+  <li>
+  <p><a 
href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20SHIRO%20AND%20status%20%3D%20Open%20ORDER%20BY%20priority%20DESC";>Shiro
 Issue Tracker</a> - Once you&rsquo;re ready to contribute, this is a good 
place to see what needs to get done</p></li>
+  <li>
+  <p><a href="http://www.apache.org/foundation/sponsorship.html";>Donate to 
ASF</a> - Shiro is a project under the Apache Software Foundation, a non-profit 
that relies on donations and community support</p></li>
+  <li>
+  <p><a href="developer-resources.html">Developer Resources</a> - Helpful 
information for anyone providing project help as a committer or 
contributor</p></li>
+</ul>
 
         </div>
 

Modified: shiro/site/publish/core.html
URL: 
http://svn.apache.org/viewvc/shiro/site/publish/core.html?rev=1766414&r1=1766413&r2=1766414&view=diff
==============================================================================
--- shiro/site/publish/core.html (original)
+++ shiro/site/publish/core.html Mon Oct 24 14:33:52 2016
@@ -78,37 +78,26 @@
 
         <div id="content">
 
-            <h1><a name="Core-CoreConceptsinApacheShiro"></a>Core Concepts in 
Apache Shiro</h1>
-
-<p>This part of the documentation covers Shiro's core architectural 
concepts.</p>
-
-<p>First we'll present Shiro's architecture and a summary of each core 
concept.  Then we'll cover the most important concept in Shiro - the 
<tt>Subject</tt>, a security-specific 'view' of a <em>single</em> application 
user.  Next we'll discuss the <tt>SecurityManager</tt>, an application 
singleton that manages all Subjects for the application, and as well as the 
SecurityManager's supporting components that do most of Shiro's heavy lifting. 
Then onto Realms, the security-specific DAOs, Shiro communicates with and then 
Permissions, the building block of any security policy.</p>
-
-<p></p>
-
-<ul><li><a href="architecture.html" 
title="Architecture">Architecture</a></li></ul>
-
-
-<ul><li><a href="subject.html" title="Subject">Subject</a></li></ul>
-
-
-<ul><li><a href="securitymanager.html" 
title="SecurityManager">SecurityManager</a><br clear="none">
-</li></ul>
-
-
-<ul><li><a href="realm.html" title="Realm">Realms</a></li></ul>
-
-
-<ul><li><a href="permissions.html" 
title="Permissions">Permissions</a></li></ul>
-
-
-<p></p>
-
-<h2><a name="Core-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>
+            <a name="Core-CoreConceptsinApacheShiro"></a>
+<h1><a href="#core-concepts-in-apache-shiro" 
name="core-concepts-in-apache-shiro">Core Concepts in Apache Shiro</a></h1>
+<p>This part of the documentation covers Shiro&rsquo;s core architectural 
concepts.</p>
+<p>First we&rsquo;ll present Shiro&rsquo;s architecture and a summary of each 
core concept. Then we&rsquo;ll cover the most important concept in Shiro - the 
<code>Subject</code>, a security-specific &lsquo;view&rsquo; of a 
<em>single</em> application user. Next we&rsquo;ll discuss the 
<tt>SecurityManager</tt>, an application singleton that manages all Subjects 
for the application, and as well as the SecurityManager&rsquo;s supporting 
components that do most of Shiro&rsquo;s heavy lifting. Then onto Realms, the 
security-specific DAOs, Shiro communicates with and then Permissions, the 
building block of any security policy.</p>
+<ul>
+  <li>
+  <p><a href="architecture.html">Architecture</a></p></li>
+  <li>
+  <p><a href="subject.html">Subject</a></p></li>
+  <li>
+  <p><a href="securitymanager.html">SecurityManager</a></p></li>
+  <li>
+  <p><a href="realm.html">Realms</a></p></li>
+  <li>
+  <p><a href="permissions.html">Permissions</a></p></li>
+</ul>
+<a name="Core-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/cryptography-features.html
URL: 
http://svn.apache.org/viewvc/shiro/site/publish/cryptography-features.html?rev=1766414&r1=1766413&r2=1766414&view=diff
==============================================================================
--- shiro/site/publish/cryptography-features.html (original)
+++ shiro/site/publish/cryptography-features.html Mon Oct 24 14:33:52 2016
@@ -78,64 +78,55 @@
 
         <div id="content">
 
-            <h1><a 
name="CryptographyFeatures-ApacheShiroCryptographyFeatures"></a>Apache Shiro 
Cryptography Features</h1>
-
-
+            <a name="CryptographyFeatures-ApacheShiroCryptographyFeatures"></a>
+<h1><a href="#apache-shiro-cryptography-features" 
name="apache-shiro-cryptography-features">Apache Shiro Cryptography 
Features</a></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>
-<a class="addthis_button_preferred_1"></a>
-<a class="addthis_button_preferred_2"></a>
-<a class="addthis_button_preferred_3"></a>
-<a class="addthis_button_preferred_4"></a>
+    <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>
+    <a class="addthis_button_preferred_1"></a>
+    <a class="addthis_button_preferred_2"></a>
+    <a class="addthis_button_preferred_3"></a>
+    <a class="addthis_button_preferred_4"></a>
 </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>
-
-
-<p><br clear="none" class="atl-forced-newline">
-Cryptography is the practice of protecting information from undesired access 
by hiding it or converting it into nonsense so know one else can read it. Shiro 
focuses on two core elements of Cryptography: ciphers that encrypt data like 
email using a public or private key, and hashes (aka message digests) that 
irreversibly encrypt data like passwords.</p>
-
-<p>Shiro Cryptography's primary goal is take what has traditionally be an 
extremely complex field and make it easy for the rest of us while providing a 
robust set of cryptography features.</p>
-
-<h2><a name="CryptographyFeatures-SimplicityFeatures"></a>Simplicity 
Features</h2>
-
-<ul><li><b>Interface-driven, POJO based</b> - All of Shiro's APIs are 
interface-based and implemented as POJOs.  This allows you to easily configure 
Shiro Cryptography components with JavaBeans-compatible formats like JSON, 
YAML, Spring XML and others.  You can also override or customize Shiro as you 
see necessary, leveraging its API to save you time and effort.</li></ul>
-
-
-<ul><li><b>Simplified wrapper over JCE</b> - The Java Cryptography Extension 
(JCE) can be complicated and difficult to use unless you're a cryptography 
expert.  Shiro's Cryptography APIs are much easier to understand and use, and 
they dramatically simplify JCE concepts.  So now even Cryptography novices can 
find what they need in minutes rather than hours or days. And you won't 
sacrifice any functionality because you still have access to more complicated 
JCE options if you need them.</li></ul>
-
-
-<ul><li><b>&#8220;Object Orientifies&#8221; cryptography concepts</b> - The 
JDK/JCE's Cipher and Message Digest (Hash) classes are abstract classes and 
quite confusing, requiring you to use obtuse factory methods with type-unsafe 
string arguments to acquire instances you want to use.  Shiro 'Object 
Orientifies' Ciphers and Hashes, basing them on a clean object hierarchy, and 
allows you to use them by simple instantiation.</li></ul>
-
-
-<ul><li><b>Runtime Exceptions</b> - Like everywhere else in Shiro, all 
cryptography exceptions are RuntimeExceptions.  You can decide whether or not 
to catch an exception based on your needs.</li></ul>
-
-
-<h2><a name="CryptographyFeatures-CipherFeatures"></a>Cipher Features</h2>
-
-<ul><li><b>OO Hierarchy</b> - Unlike the JCE, Shiro Cipher representations 
follow an Object-Oriented class hierarchy that match their mathematical 
concepts: <tt>AbstractSymmetricCipherService</tt>, 
<tt>DefaultBlockCipherService</tt>, <tt>AesCipherService</tt>, etc.  This 
allows you to easily override existing classes and extend functionality as 
needed.</li></ul>
-
-
-<ul><li><b>Just instantiate a class</b> - Unlike the JCE's confusing factory 
methods using String token arguments, using Shiro Ciphers are much easier - 
just instantiate a class, configure it with JavaBeans properties as necessary, 
and use it as desired.  For example, <tt>new AesCipherService()</tt>.</li></ul>
-
-
-<ul><li><b>More secure default settings</b> - The JCE Cipher instances assume 
a 'lowest common denominator' default and do not automatically enable more 
secure options.  Shiro will automatically enable the more secure options to 
ensure your data is as safe as it can be by default, helping you prevent 
accidental security holes.</li></ul>
-
-
-<h2><a name="CryptographyFeatures-HashFeatures"></a>Hash Features</h2>
-
-<ul><li><b>Deault interface implementations</b> - Shiro provides default Hash 
(aka Message Digests in the JDK) implementations out-of-the-box, such as MD5, 
SHA1, SHA-256, et al.  This provides a type-safe construction method (e.g. 
<tt>new Md5Hash(data)</tt>) instead of being forced to use type-unsafe string 
factory methods in the JDK.</li></ul>
-
-
-<ul><li><b>Built-in Hex and Base64 conversion</b> - Shiro Hash instances can 
automatically provide Hex and Base-64 encoding of hashed data via their 
<tt>toHex()</tt> and <tt>toBase64()</tt> methods.  So now you do not need to 
figure out how to correctly encode the data yourself.</li></ul>
-
-
-<ul><li><b>Built-in Salt and repeated hashing support</b> - Salts and repeated 
hash iterations are very valuable tools when hashing data, especially when it 
comes to protecting user passwords.  Shiro's Hash implementations support salts 
and multiple hash iterations out of the box so you don't have to repeat this 
logic anywhere you might need it.</li></ul>
-
-
-<h2><a name="CryptographyFeatures-GetStartedin10MinuteswithShiro"></a>Get 
Started in 10 Minutes with Shiro</h2>
-<p>Try out Shiro for yourself with our <a href="10-minute-tutorial.html" 
title="10 Minute Tutorial">10 Minute Tutorial</a>.  And if you have any 
questions about Shiro, please check out our <a href="forums.html" 
title="Forums">community forum</a> or <a href="mailing-lists.html" 
title="Mailing Lists">user mailing list</a> for answers from the community.</p>
+<p>Cryptography is the practice of protecting information from undesired 
access by hiding it or converting it into nonsense so know one else can read 
it. Shiro focuses on two core elements of Cryptography: ciphers that encrypt 
data like email using a public or private key, and hashes (aka message digests) 
that irreversibly encrypt data like passwords.</p>
+<p>Shiro Cryptography&rsquo;s primary goal is take what has traditionally be 
an extremely complex field and make it easy for the rest of us while providing 
a robust set of cryptography features.</p>
+<a name="CryptographyFeatures-SimplicityFeatures"></a>
+<h2><a href="#simplicity-features" name="simplicity-features">Simplicity 
Features</a></h2>
+<ul>
+  <li>
+  <p><strong>Interface-driven, POJO based</strong> - All of Shiro&rsquo;s APIs 
are interface-based and implemented as POJOs. This allows you to easily 
configure Shiro Cryptography components with JavaBeans-compatible formats like 
JSON, YAML, Spring XML and others. You can also override or customize Shiro as 
you see necessary, leveraging its API to save you time and effort.</p></li>
+  <li>
+  <p><strong>Simplified wrapper over JCE</strong> - The Java Cryptography 
Extension (JCE) can be complicated and difficult to use unless you&rsquo;re a 
cryptography expert. Shiro&rsquo;s Cryptography APIs are much easier to 
understand and use, and they dramatically simplify JCE concepts. So now even 
Cryptography novices can find what they need in minutes rather than hours or 
days. And you won&rsquo;t sacrifice any functionality because you still have 
access to more complicated JCE options if you need them.</p></li>
+  <li>
+  <p><strong>“Object Orientifies” cryptography concepts</strong> - The 
JDK/JCE&rsquo;s Cipher and Message Digest (Hash) classes are abstract classes 
and quite confusing, requiring you to use obtuse factory methods with 
type-unsafe string arguments to acquire instances you want to use. Shiro 
&lsquo;Object Orientifies&rsquo; Ciphers and Hashes, basing them on a clean 
object hierarchy, and allows you to use them by simple instantiation.</p></li>
+  <li>
+  <p><strong>Runtime Exceptions</strong> - Like everywhere else in Shiro, all 
cryptography exceptions are RuntimeExceptions. You can decide whether or not to 
catch an exception based on your needs.</p></li>
+</ul>
+<a name="CryptographyFeatures-CipherFeatures"></a>
+<h2><a href="#cipher-features" name="cipher-features">Cipher Features</a></h2>
+<ul>
+  <li>
+  <p><strong>OO Hierarchy</strong> - Unlike the JCE, Shiro Cipher 
representations follow an Object-Oriented class hierarchy that match their 
mathematical concepts: <code>AbstractSymmetricCipherService</code>, 
<code>DefaultBlockCipherService</code>, <code>AesCipherService</code>, etc. 
This allows you to easily override existing classes and extend functionality as 
needed.</p></li>
+  <li>
+  <p><strong>Just instantiate a class</strong> - Unlike the JCE&rsquo;s 
confusing factory methods using String token arguments, using Shiro Ciphers are 
much easier - just instantiate a class, configure it with JavaBeans properties 
as necessary, and use it as desired. For example, <code>new 
AesCipherService()</code>.</p></li>
+  <li>
+  <p><strong>More secure default settings</strong> - The JCE Cipher instances 
assume a &lsquo;lowest common denominator&rsquo; default and do not 
automatically enable more secure options. Shiro will automatically enable the 
more secure options to ensure your data is as safe as it can be by default, 
helping you prevent accidental security holes.</p></li>
+</ul>
+<a name="CryptographyFeatures-HashFeatures"></a>
+<h2><a href="#hash-features" name="hash-features">Hash Features</a></h2>
+<ul>
+  <li>
+  <p><strong>Deault interface implementations</strong> - Shiro provides 
default Hash (aka Message Digests in the JDK) implementations out-of-the-box, 
such as MD5, SHA1, SHA-256, et al. This provides a type-safe construction 
method (e.g. <code>new Md5Hash(data)</code>) instead of being forced to use 
type-unsafe string factory methods in the JDK.</p></li>
+  <li>
+  <p><strong>Built-in Hex and Base64 conversion</strong> - Shiro Hash 
instances can automatically provide Hex and Base-64 encoding of hashed data via 
their <code>toHex()</code> and <code>toBase64()</code> methods. So now you do 
not need to figure out how to correctly encode the data yourself.</p></li>
+  <li>
+  <p><strong>Built-in Salt and repeated hashing support</strong> - Salts and 
repeated hash iterations are very valuable tools when hashing data, especially 
when it comes to protecting user passwords. Shiro&rsquo;s Hash implementations 
support salts and multiple hash iterations out of the box so you don&rsquo;t 
have to repeat this logic anywhere you might need it.</p></li>
+</ul>
+<a name="CryptographyFeatures-GetStartedin10MinuteswithShiro"></a>
+<h2><a href="#get-started-in-10-minutes-with-shiro" 
name="get-started-in-10-minutes-with-shiro">Get Started in 10 Minutes with 
Shiro</a></h2>
+<p>Try out Shiro for yourself with our <a href="10-minute-tutorial.html" 
title="10 Minute Tutorial">10 Minute Tutorial</a>. And if you have any 
questions about Shiro, please check out our <a href="forums.html" 
title="Forums">community forum</a> or <a href="mailing-lists.html" 
title="Mailing Lists">user mailing list</a> for answers from the community.</p>
 
         </div>
 

Modified: shiro/site/publish/cryptography.html
URL: 
http://svn.apache.org/viewvc/shiro/site/publish/cryptography.html?rev=1766414&r1=1766413&r2=1766414&view=diff
==============================================================================
--- shiro/site/publish/cryptography.html (original)
+++ shiro/site/publish/cryptography.html Mon Oct 24 14:33:52 2016
@@ -78,14 +78,11 @@
 
         <div id="content">
 
-            <p>TO DO. In the mean time, you can read more about <a 
href="cryptography-features.html" title="Apache Shiro Cryptography 
Features">Shiro's Crypography Features</a>.</p>
-
-<h2><a name="Cryptography-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>TODO. In the mean time, you can read more about <a 
href="cryptography-features.html" title="Apache Shiro Cryptography 
Features">Shiro&rsquo;s Crypography Features</a>.</p>
+<a name="Cryptography-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" title="Mailing Lists">User Mailing List</a>.</p>
 
         </div>
 

Modified: shiro/site/publish/developer-resources.html
URL: 
http://svn.apache.org/viewvc/shiro/site/publish/developer-resources.html?rev=1766414&r1=1766413&r2=1766414&view=diff
==============================================================================
--- shiro/site/publish/developer-resources.html (original)
+++ shiro/site/publish/developer-resources.html Mon Oct 24 14:33:52 2016
@@ -78,39 +78,33 @@
 
         <div id="content">
 
-            <h1><a 
name="DeveloperResources-ApacheShiroDeveloperResources"></a>Apache Shiro 
Developer Resources</h1>
-
+            <a name="DeveloperResources-ApacheShiroDeveloperResources"></a>
+<h1><a href="#apache-shiro-developer-resources" 
name="apache-shiro-developer-resources">Apache Shiro Developer 
Resources</a></h1>
 <p>This page and its children are dedicated for reference information used by 
the Apache Shiro development team when performing tasks as a committer or 
contributor</p>
-
-<h2><a name="DeveloperResources-WritingDocumentation"></a>Writing 
Documentation</h2>
-
-<p>All non-JavaDoc documentation is managed in our <a class="external-link" 
href="https://github.com/apache/shiro-site";>apache/shiro-site</a> repo.</p>
-
-<h2><a name="DeveloperResources-SourceCodeRepository"></a>Source Code 
Repository</h2>
-
-<p>We use a Git repository located at <a class="external-link" 
href="git://git.apache.org/shiro.git">git://git.apache.org/shiro.git</a>.</p>
-
-<p>Active development is done in the <tt>master</tt> branch, and maintenance 
typically on the <tt>1.2.x</tt> branch.</p>
-
-<h3><a name="DeveloperResources-BuildingfromGit"></a>Building from Git</h3>
-
-<p>For Shiro cutting-edge development, you can clone the code from Git and 
build it using <a class="external-link" 
href="http://maven.apache.org";>Maven</a> 2.2+:</p>
-
-<ol><li>Check out the code:
-<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
-<pre class="code-java">
-git clone https:<span class="code-comment">//github.com/apache/shiro.git</span>
-</pre>
-</div></div></li><li>Build the project using <a class="external-link" 
href="http://maven.apache.org";>Maven</a> 2.2+:
-<div class="code panel" style="border-width: 1px;"><div class="codeContent 
panelContent">
-<pre class="code-java">
-cd shiro
+<a name="DeveloperResources-WritingDocumentation"></a>
+<h2><a href="#writing-documentation" name="writing-documentation">Writing 
Documentation</a></h2>
+<p>All non-JavaDoc documentation is managed in our <a 
href="https://github.com/apache/shiro-site";>apache/shiro-site</a> repo.</p>
+<a name="DeveloperResources-SourceCodeRepository"></a>
+<h2><a href="#source-code-repository" name="source-code-repository">Source 
Code Repository</a></h2>
+<p>We use a Git repository located at <a 
href="git://git.apache.org/shiro.git">git://git.apache.org/shiro.git</a>.</p>
+<p>Active development is done in the <code>master</code> branch, and 
maintenance typically on the <code>1.2.x</code> branch.</p>
+<a name="DeveloperResources-BuildingfromGit"></a>
+<h3><a href="#building-from-git" name="building-from-git">Building from 
Git</a></h3>
+<p>For Shiro cutting-edge development, you can clone the code from Git and 
build it using <a href="http://maven.apache.org";>Maven</a> 2.2+:</p>
+<ol>
+  <li>
+    <p>Check out the code:</p>
+    <pre><code class="bash">git clone https://github.com/apache/shiro.git
+</code></pre>
+  </li>
+  <li>
+    <p>Build the project using <a href="http://maven.apache.org";>Maven</a> 
3.x+:</p>
+    <pre><code class="bash">cd shiro
 mvn install
-</pre>
-</div></div>
-<p>The resulting artifacts will be in your local M2 Repo under the 
org.apache.shiro group.</p></li></ol>
-
-
+</code></pre>
+    <p>The resulting artifacts will be in your local M2 Repo under the 
org.apache.shiro group.</p>
+  </li>
+</ol>
 <div class="panelMacro">
     <table class="warningMacro">
         <colgroup span="1">
@@ -126,14 +120,13 @@ mvn install
             <td colspan="1" rowspan="1">
                 <b>Cutting-edge development</b>
                 <br clear="none">
-                When building from <tt>master</tt> or any branches, use the 
generated artifacts at your own risk!  Current and previous stable releases 
will always be available via the <a href="download.html" 
title="Download">Download</a> page.
+                When building from `master` or any branches, use the generated 
artifacts at your own risk!  Current and previous stable releases will always 
be available via the <a href="download.html" title="Download">Download</a> page.
             </td>
         </tr>
         </tbody>
     </table>
 </div>
 
-
         </div>
 
     </div><!--END WRAPPER-->


Reply via email to