This is an automated email from the ASF dual-hosted git repository.
lprimak pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/shiro-site.git
The following commit(s) were added to refs/heads/main by this push:
new 037c766c9 chore: remove unneeded trailing whitespace (#232)
037c766c9 is described below
commit 037c766c93c533366f41144a16c5686bf941bacc
Author: John Bampton <[email protected]>
AuthorDate: Tue Jul 1 12:19:29 2025 +1000
chore: remove unneeded trailing whitespace (#232)
---
.github/workflows/publish.yml | 2 +-
.github/workflows/staging.yml | 2 +-
src/site/assets/highlight.js-11.2.0/highlight.js | 2 +-
src/site/content/authentication.adoc | 2 +-
src/site/content/authorization.adoc | 2 +-
src/site/content/configuration.adoc | 2 +-
src/site/content/forums.adoc | 2 +-
src/site/content/graduation-resolution.adoc | 6 +++---
src/site/content/how-to-contribute.adoc | 4 ++--
src/site/content/integration.adoc | 4 ++--
src/site/content/java-authentication-guide.adoc | 16 +++++++--------
src/site/content/java-authorization-guide.adoc | 2 +-
src/site/content/java-cryptography-guide.adoc | 6 +++---
src/site/content/jaxrs.adoc | 2 +-
src/site/content/realm.adoc | 18 ++++++++--------
src/site/content/security-reports.adoc | 2 +-
src/site/content/securitymanager.adoc | 4 ++--
src/site/content/subject.adoc | 26 ++++++++++++------------
src/site/content/testing.adoc | 2 +-
src/site/content/tutorial.adoc | 2 +-
src/site/content/webapp-tutorial.adoc | 18 ++++++++--------
src/site/templates/post.ftl | 2 +-
src/site/templates/tags.ftl | 8 ++++----
23 files changed, 68 insertions(+), 68 deletions(-)
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index a45b9348f..2f14ac28b 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -59,6 +59,6 @@ jobs:
git config user.name "GitHub Actions Bot"
git config user.email "<>"
git add .
- git commit -m "publishing $(date -Is)"
+ git commit -m "publishing $(date -Is)"
git push
shell: bash
diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml
index 4a066d529..98109e6d3 100644
--- a/.github/workflows/staging.yml
+++ b/.github/workflows/staging.yml
@@ -68,7 +68,7 @@ jobs:
git config user.name "GitHub Actions Bot"
git config user.email "<>"
git add .
- git commit -m "staging $(date -Is)"
+ git commit -m "staging $(date -Is)"
git push
shell: bash
diff --git a/src/site/assets/highlight.js-11.2.0/highlight.js
b/src/site/assets/highlight.js-11.2.0/highlight.js
index 4bd5a12b6..a3d85345c 100644
--- a/src/site/assets/highlight.js-11.2.0/highlight.js
+++ b/src/site/assets/highlight.js-11.2.0/highlight.js
@@ -39,7 +39,7 @@ var hljs = (function () {
var deepFreeze$1 = deepFreezeEs6.exports;
-
+
/** @typedef {import('highlight.js').CompiledMode} CompiledMode */
/** @implements CallbackResponse */
diff --git a/src/site/content/authentication.adoc
b/src/site/content/authentication.adoc
index 69fc1eb22..cdf09cb10 100644
--- a/src/site/content/authentication.adoc
+++ b/src/site/content/authentication.adoc
@@ -53,7 +53,7 @@ The following code demonstrates how Shiro's API reflects
these steps:
//Example using most common scenario of username/password pair:
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
-//"Remember Me" built-in:
+//"Remember Me" built-in:
token.setRememberMe(true);
----
diff --git a/src/site/content/authorization.adoc
b/src/site/content/authorization.adoc
index 9a6df0c75..d24d11732 100644
--- a/src/site/content/authorization.adoc
+++ b/src/site/content/authorization.adoc
@@ -635,7 +635,7 @@ realm.rolePermissionResolver = $rolePermissionResolver
[#Authentication-AuthorizingSubjects-CustomAuthorizer]
=== Custom Authorizer
-If your application uses more than one realm to perform authorization and the
`ModularRealmAuthorizer` is default simple
+If your application uses more than one realm to perform authorization and the
`ModularRealmAuthorizer` is default simple
iteration-based, short-circuiting authorization behavior does not suit your
needs, you will probably want to create a custom `Authorizer` and configure the
`SecurityManager` accordingly.
For example, in `shiro.ini`:
diff --git a/src/site/content/configuration.adoc
b/src/site/content/configuration.adoc
index 417fcee54..9e9c169d5 100644
--- a/src/site/content/configuration.adoc
+++ b/src/site/content/configuration.adoc
@@ -27,7 +27,7 @@ The absolute simplest way to create a SecurityManager and
make it available to t
Realm realm = //instantiate or acquire a Realm instance. We'll discuss Realms
later.
SecurityManager securityManager = new DefaultSecurityManager(realm);
-//Make the SecurityManager instance available to the entire application via
static memory:
+//Make the SecurityManager instance available to the entire application via
static memory:
SecurityUtils.setSecurityManager(securityManager);
----
diff --git a/src/site/content/forums.adoc b/src/site/content/forums.adoc
index a207a02e2..6202f54f1 100644
--- a/src/site/content/forums.adoc
+++ b/src/site/content/forums.adoc
@@ -5,7 +5,7 @@
:jbake-tags: documentation, community
:idprefix:
-For users that prefer to use browse the mailing lists with a browser can use
https://lists.apache.org/[ASF Lists] (Pony Mail).
+For users that prefer to use browse the mailing lists with a browser can use
https://lists.apache.org/[ASF Lists] (Pony Mail).
* link:++https://lists.apache.org/[email protected]++[Shiro User
Forum]
diff --git a/src/site/content/graduation-resolution.adoc
b/src/site/content/graduation-resolution.adoc
index 55e0d4055..e2691fcdd 100644
--- a/src/site/content/graduation-resolution.adoc
+++ b/src/site/content/graduation-resolution.adoc
@@ -15,7 +15,7 @@ WHEREAS, the Board of Directors deems it to be in the best
interests of the Foundation and consistent with the Foundation's
purpose to establish a Project Management Committee charged with
the creation and maintenance of open-source software related to
-application security, for distribution at no charge to the
+application security, for distribution at no charge to the
public.
NOW, THEREFORE, BE IT RESOLVED, that a Project Management
@@ -30,8 +30,8 @@ project related to application security; and be it further
RESOLVED, that the office of "Vice President, Shiro" be and
hereby is created, the person holding such office to serve at the
direction of the Board of Directors as the chair of The Apache
-Shiro Project, and to have primary responsibility for management
-of the projects within the scope of responsibility of
+Shiro Project, and to have primary responsibility for management
+of the projects within the scope of responsibility of
The Apache Shiro Project; and be it further
RESOLVED, that the persons listed immediately below be and
diff --git a/src/site/content/how-to-contribute.adoc
b/src/site/content/how-to-contribute.adoc
index f520e8286..1fc06756c 100644
--- a/src/site/content/how-to-contribute.adoc
+++ b/src/site/content/how-to-contribute.adoc
@@ -161,7 +161,7 @@ After a developer has consistently provided contributions
such as code, document
== Contributing as a Non-Committer
-Non-committers have to submit patches for review. Apache Shiro accepts GitHub
pull requests.
+Non-committers have to submit patches for review. Apache Shiro accepts GitHub
pull requests.
Apache Shiro has a read-only mirror on GitHub that is kept in sync with the
canonical Git repo maintained by the Apache Software Foundation. For detailed
instructions see the
https://github.com/apache/shiro/blob/master/CONTRIBUTING.md[GitHub Contribution
Guidelines].
@@ -174,7 +174,7 @@ This is a collection of tips for contributing to the
project in a manner that is
* https://www.apache.org/dev/contrib-email-tips.html[Tips for email
contributors].
* Old questions and answers in
https://shiro.apache.org/mailing-lists.html[archives].
-There are no dumb questions. But browse, search and learn from mailing list
archives. Research your topic thoroughly before beginning to discuss a new
development issue.
+There are no dumb questions. But browse, search and learn from mailing list
archives. Research your topic thoroughly before beginning to discuss a new
development issue.
=== Emails
diff --git a/src/site/content/integration.adoc
b/src/site/content/integration.adoc
index ef0a22693..02bc8d4f9 100644
--- a/src/site/content/integration.adoc
+++ b/src/site/content/integration.adoc
@@ -7,7 +7,7 @@
:icons: font
:toc:
-Shiro has been downloaded over one million times and is in production at
thousands of companies. One reason: it integrates well with other technologies
and frameworks.
+Shiro has been downloaded over one million times and is in production at
thousands of companies. One reason: it integrates well with other technologies
and frameworks.
== Officially Supported Integrations
@@ -39,7 +39,7 @@ An easy and powerful security library for Shiro web
applications and web service
+
from https://nerderg.com/[nerdEng].
+
-Adds easy authentication and access control to Grails applications.
+Adds easy authentication and access control to Grails applications.
* *https://isis.apache.org[Apache Isis]*
+
diff --git a/src/site/content/java-authentication-guide.adoc
b/src/site/content/java-authentication-guide.adoc
index 52479ce83..9c94a7808 100644
--- a/src/site/content/java-authentication-guide.adoc
+++ b/src/site/content/java-authentication-guide.adoc
@@ -44,12 +44,12 @@ Here is some code on how you do this in Shiro Specifically.
[source,java]
----
-//Example using most common scenario:
-//String username and password. Acquire in
+//Example using most common scenario:
+//String username and password. Acquire in
//system-specific manner (HTTP request, GUI, etc)
UsernamePasswordToken token = new UsernamePasswordToken( username, password );
-//”Remember Me” built-in, just do this:
+//”Remember Me” built-in, just do this:
token.setRememberMe(true);
----
@@ -76,13 +76,13 @@ In Shiro, we try to make this part as quick and easy as
humanly possible. We hav
[source,java]
----
-//With most of Shiro, you'll always want to make sure you're working with the
currently
-//executing user, referred to as the subject
+//With most of Shiro, you'll always want to make sure you're working with the
currently
+//executing user, referred to as the subject
Subject currentUser = SecurityUtils.getSubject();
-//Authenticate the subject by passing
-//the user name and password token
-//into the login method
+//Authenticate the subject by passing
+//the user name and password token
+//into the login method
currentUser.login(token);
----
diff --git a/src/site/content/java-authorization-guide.adoc
b/src/site/content/java-authorization-guide.adoc
index a663eaa1c..4cc5e16ed 100644
--- a/src/site/content/java-authorization-guide.adoc
+++ b/src/site/content/java-authorization-guide.adoc
@@ -81,7 +81,7 @@ First we get access to the current user, the
link:subject.html[Subject]. Then we
[source,java]
----
-//get the current Subject
+//get the current Subject
Subject currentUser = SecurityUtils.getSubject();
if (currentUser.hasRole("administrator")) {
diff --git a/src/site/content/java-cryptography-guide.adoc
b/src/site/content/java-cryptography-guide.adoc
index bfb8976d9..5f11899ed 100644
--- a/src/site/content/java-cryptography-guide.adoc
+++ b/src/site/content/java-cryptography-guide.adoc
@@ -79,12 +79,12 @@ public interface Hash {
[source,java]
----
-//some examples:
+//some examples:
new Md5Hash("foo").toHex();
-//File MD5 Hash value for checksum:
+//File MD5 Hash value for checksum:
new MD5Hash( aFile ).toHex();
-//store a password, but not raw:
+//store a password, but not raw:
new Sha256(aPassword, salt, 1024).toBase64();
----
diff --git a/src/site/content/jaxrs.adoc b/src/site/content/jaxrs.adoc
index e6390e3ae..917bb459d 100644
--- a/src/site/content/jaxrs.adoc
+++ b/src/site/content/jaxrs.adoc
@@ -85,7 +85,7 @@ public class HelloShiro {
public String sayHelloShiro() {
return "Hello!";
}
-
+
@GET
@Path("define")
@RequiresPermissions("hello:define")
diff --git a/src/site/content/realm.adoc b/src/site/content/realm.adoc
index 627bd4c2e..cb8008e62 100644
--- a/src/site/content/realm.adoc
+++ b/src/site/content/realm.adoc
@@ -210,22 +210,22 @@ import org.apache.shiro.crypto.RandomNumberGenerator;
import org.apache.shiro.crypto.SecureRandomNumberGenerator;
...
-//We'll use a Random Number Generator to generate salts. This
-//is much more secure than using a username as a salt or not
-//having a salt at all. Shiro makes this easy.
+//We'll use a Random Number Generator to generate salts. This
+//is much more secure than using a username as a salt or not
+//having a salt at all. Shiro makes this easy.
//
-//Note that a normal app would reference an attribute rather
-//than create a new RNG every time:
+//Note that a normal app would reference an attribute rather
+//than create a new RNG every time:
RandomNumberGenerator rng = new SecureRandomNumberGenerator();
Object salt = rng.nextBytes();
-//Now hash the plain-text password with the random salt and multiple
-//iterations and then Base64-encode the value (requires less space than Hex):
+//Now hash the plain-text password with the random salt and multiple
+//iterations and then Base64-encode the value (requires less space than Hex):
String hashedPasswordBase64 = new Sha256Hash(plainTextPassword, salt,
1024).toBase64();
User user = new User(username, hashedPasswordBase64);
-//save the salt with the new account. The HashedCredentialsMatcher
-//will need it later when handling login attempts:
+//save the salt with the new account. The HashedCredentialsMatcher
+//will need it later when handling login attempts:
user.setPasswordSalt(salt);
userDAO.create(user);
----
diff --git a/src/site/content/security-reports.adoc
b/src/site/content/security-reports.adoc
index 07614b18d..449e3f7b5 100644
--- a/src/site/content/security-reports.adoc
+++ b/src/site/content/security-reports.adoc
@@ -55,7 +55,7 @@ Apache Shiro would like to thank *swifty tk* for reporting
this issue.
When using Apache Shiro before 1.11.0 together with Spring Boot 2.6+, a
specially crafted HTTP request may cause an authentication bypass.
The authentication bypass occurs when Shiro and Spring Boot are using
different pattern-matching techniques. Both Shiro and Spring Boot < 2.6 default
to Ant style pattern matching.
-**Mitigation:** Update to Apache Shiro 1.11.0, or set the following Spring
Boot configuration value:
+**Mitigation:** Update to Apache Shiro 1.11.0, or set the following Spring
Boot configuration value:
```properties
spring.mvc.pathmatch.matching-strategy = ant_path_matcher
diff --git a/src/site/content/securitymanager.adoc
b/src/site/content/securitymanager.adoc
index c8133b67a..15f55415a 100644
--- a/src/site/content/securitymanager.adoc
+++ b/src/site/content/securitymanager.adoc
@@ -59,9 +59,9 @@ The absolute simplest way to create a SecurityManager and
make it available to t
[source,java]
----
-Realm realm = //instantiate or acquire a Realm instance. We'll discuss Realms
later.
+Realm realm = //instantiate or acquire a Realm instance. We'll discuss Realms
later.
SecurityManager securityManager = new DefaultSecurityManager(realm);
-//Make the SecurityManager instance available to the entire application:
+//Make the SecurityManager instance available to the entire application:
SecurityUtils.setSecurityManager(securityManager);
----
diff --git a/src/site/content/subject.adoc b/src/site/content/subject.adoc
index aa438a368..c37a09202 100644
--- a/src/site/content/subject.adoc
+++ b/src/site/content/subject.adoc
@@ -111,7 +111,7 @@ Let's say who they are:
[source,java]
----
-//print their identifying principal (in this case, a username):
+//print their identifying principal (in this case, a username):
log.info( "User [" + currentUser.getPrincipal() + "] logged in successfully."
);
----
@@ -210,7 +210,7 @@ The default, no-arg `Subject.Builder()` constructor shown
above will use the app
[source,java]
----
-SecurityManager securityManager = //acquired from somewhere
+SecurityManager securityManager = //acquired from somewhere
Subject subject = new Subject.Builder(securityManager).buildSubject();
----
@@ -219,7 +219,7 @@ For example, if you have a session ID and want to acquire
the `Subject` that 'ow
[source,java]
----
-Serializable sessionId = //acquired from somewhere
+Serializable sessionId = //acquired from somewhere
Subject subject = new Subject.Builder().sessionId(sessionId).buildSubject();
----
@@ -227,7 +227,7 @@ Similarly, if you want to create a `Subject` instance that
reflects a certain id
[source,java]
----
-Object userIdentity = //a long ID or String username, or whatever the
"myRealm" requires
+Object userIdentity = //a long ID or String username, or whatever the
"myRealm" requires
String realmName = "myRealm";
PrincipalCollection principals = new SimplePrincipalCollection(userIdentity,
realmName);
Subject subject = new Subject.Builder().principals(principals).buildSubject();
@@ -265,7 +265,7 @@ For example, let's say that you had some logic to perform
when the system starts
[source,java]
----
-Subject subject = //build or acquire subject
+Subject subject = //build or acquire subject
subject.execute( new Runnable() {
public void run() {
//subject is 'bound' to the current thread now
@@ -273,7 +273,7 @@ subject.execute( new Runnable() {
//code called from here will work
}
});
-//At this point, the Subject is no longer associated
+//At this point, the Subject is no longer associated
//with the current thread and everything is as it was before
----
@@ -281,7 +281,7 @@ Of course `Callable` instances are supported as well, so
you can have return val
[source,java]
----
-Subject subject = //build or acquire subject
+Subject subject = //build or acquire subject
MyResult result = subject.execute( new Callable<MyResult>() {
public MyResult call() throws Exception {
//subject is 'bound' to the current thread now
@@ -293,7 +293,7 @@ MyResult result = subject.execute( new Callable<MyResult>()
{
return myResult;
}
});
-//At this point, the Subject is no longer associated
+//At this point, the Subject is no longer associated
//with the current thread and everything is as it was before
----
@@ -356,11 +356,11 @@ Callable example:
[source,java]
----
Subject subject = new Subject.Builder()...
-Callable work = //build/acquire a Callable instance.
-//associate the work with the built subject so SecurityUtils.getSubject()
calls works properly:
+Callable work = //build/acquire a Callable instance.
+//associate the work with the built subject so SecurityUtils.getSubject()
calls works properly:
work = subject.associateWith(work);
ExecutorService executor =
java.util.concurrent.Executors.newCachedThreadPool();
-//execute the work on a different thread as the built Subject:
+//execute the work on a different thread as the built Subject:
executor.execute(work);
----
@@ -369,8 +369,8 @@ Runnable example:
[source,java]
----
Subject subject = new Subject.Builder()...
-Runnable work = //build/acquire a Runnable instance.
-//associate the work with the built subject so SecurityUtils.getSubject()
calls works properly:
+Runnable work = //build/acquire a Runnable instance.
+//associate the work with the built subject so SecurityUtils.getSubject()
calls works properly:
work = subject.associateWith(work);
ExecutorService executor =
java.util.concurrent.Executors.newCachedThreadPool();
//execute the work on a different thread as the built Subject:
diff --git a/src/site/content/testing.adoc b/src/site/content/testing.adoc
index 78e446893..e1f745e2e 100644
--- a/src/site/content/testing.adoc
+++ b/src/site/content/testing.adoc
@@ -149,7 +149,7 @@ import org.junit.Test;
import static org.easymock.EasyMock.*;
/**
- * Simple example test class showing how one may perform unit tests for
+ * Simple example test class showing how one may perform unit tests for
* code that requires Shiro APIs.
*/
public class ExampleShiroUnitTest extends AbstractShiroTest {
diff --git a/src/site/content/tutorial.adoc b/src/site/content/tutorial.adoc
index 55dab772b..8419c411b 100644
--- a/src/site/content/tutorial.adoc
+++ b/src/site/content/tutorial.adoc
@@ -342,7 +342,7 @@ Let's say who they are:
[source,java]
----
-//print their identifying principal (in this case, a username):
+//print their identifying principal (in this case, a username):
log.info( "User [" + currentUser.getPrincipal() + "] logged in successfully."
);
----
diff --git a/src/site/content/webapp-tutorial.adoc
b/src/site/content/webapp-tutorial.adoc
index 5c12dcbb3..8cc364e92 100644
--- a/src/site/content/webapp-tutorial.adoc
+++ b/src/site/content/webapp-tutorial.adoc
@@ -63,7 +63,7 @@ Now that you have forked the repository to your own GitHub
account, clone it on
[source,bash]
----
-$ git clone
[email protected]:$YOUR_GITHUB_USERNAME/apache-shiro-tutorial-webapp.git
+$ git clone
[email protected]:$YOUR_GITHUB_USERNAME/apache-shiro-tutorial-webapp.git
----
@@ -124,7 +124,7 @@ Now that you've cloned the project, you can run the web
application by executing
$ mvn jetty:run
----
-Next, open your web browser to http://localhost:8080[localhost:8080], and
you'll see the home page with a *Hello, World!* greeting.
+Next, open your web browser to http://localhost:8080[localhost:8080], and
you'll see the home page with a *Hello, World!* greeting.
Hit `ctl-C` to shut down the web app.
@@ -237,13 +237,13 @@ Before we can log in, or logout, or perform role-based or
permission-based acces
We will need to configure Shiro to access a _User Store_ of some type, so it
can look up users to perform login attempts, or check roles for security
decisions, etc. There are many types of user stores that any application might
need to access: maybe you store users in a MySQL database, maybe in MongoDB,
maybe your company stores user accounts in LDAP or Active Directory, maybe you
store them in a simple file, or some other proprietary data store.
-Shiro does this via what it calls a
https://shiro.apache.org/architecture.html[`Realm`]. From Shiro's
documentation:
+Shiro does this via what it calls a
https://shiro.apache.org/architecture.html[`Realm`]. From Shiro's documentation:
____
-Realms act as the ‘bridge’ or ‘connector’ between Shiro and your application’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.
+Realms act as the ‘bridge’ or ‘connector’ between Shiro and your application’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.
-In this sense a Realm is essentially a security-specific
https://en.wikipedia.org/wiki/Data_access_object[DAO]: 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 SecurityManager may be
configured with multiple Realms, but at least one is required.
+In this sense a Realm is essentially a security-specific
https://en.wikipedia.org/wiki/Data_access_object[DAO]: 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 SecurityManager may be
configured with multiple Realms, but at least one is required.
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.
@@ -342,7 +342,7 @@ curl -u $API_KEY_ID:$API_KEY_SECRET \
'$TENANT_HREF/applications?name=My%20Application'
----
-where:
+where:
* $YOUR_API_KEY_ID is the apiKey.id value in apiKey.properties and
* $YOUR_API_KEY_SECRET is the apiKey.secret value in apiKey.properties
@@ -400,7 +400,7 @@ Once you choose at least one user store to connect to for
Shiro's needs, we'll n
If you've checked out the `step2` branch, you'll notice the
`src/main/webapp/WEB-INF/shiro.ini` file's `[main]` section now has the
following additions:
-Note the optional lines:
+Note the optional lines:
* If you have been using Stormpath for a while, and you have more than one
Stormpath application, the `stormpathRealm.applicationRestUrl` property must be
set.
@@ -735,7 +735,7 @@ We update the `/home.jsp` page to let the user know what
roles they have and whi
<p>Here are the roles you have and don't have. Log out and log back in under
different user
accounts to see different roles.</p>
-
+
<h3>Roles you have:</h3>
<p>
@@ -813,7 +813,7 @@ This adds two permissions directly to the Stormpath Account:
* `ship:NCC-1701-D:command`
* `user:jlpicard:edit`
-These use Shiro's
https://shiro.apache.org/permissions.html[WildcardPermission] syntax.
+These use Shiro's
https://shiro.apache.org/permissions.html[WildcardPermission] syntax.
The first basically means _the ability to 'command' the 'ship' with identifier
'NCC-1701-D'_. This is an example of an _instance-level_ permission:
controlling access to a specific _instance_ `NCC-1701-D` of a resource `ship`.
The second is also an instance-level permission that states _the ability to
`edit` the `user` with identifier `jlpicard`_.
diff --git a/src/site/templates/post.ftl b/src/site/templates/post.ftl
index 3319dc6b2..b3daa227c 100644
--- a/src/site/templates/post.ftl
+++ b/src/site/templates/post.ftl
@@ -40,5 +40,5 @@
${content.body}
<hr />
-
+
<#include "footer.ftl">
diff --git a/src/site/templates/tags.ftl b/src/site/templates/tags.ftl
index 382213ce7..c08cfeec5 100644
--- a/src/site/templates/tags.ftl
+++ b/src/site/templates/tags.ftl
@@ -1,9 +1,9 @@
<#include "header.ftl">
-
+
<div class="page-header">
<h1>Tag: ${tag}</h1>
</div>
-
+
<!--<ul>-->
<#list tag_posts as post>
<#if (last_month)??>
@@ -16,10 +16,10 @@
<h4>${post.date?string("MMMM yyyy")}</h4>
<ul>
</#if>
-
+
<li>${post.date?string("dd")} - <a
href="${content.rootpath}${post.uri}">${post.title}</a></li>
<#assign last_month = post.date?string("MMMM yyyy")>
</#list>
</ul>
-
+
<#include "footer.ftl">
\ No newline at end of file