|
@@ -342,51 +342,61 @@
|
|
|
<literal>ContextHolder</literal> was used will likely mean that
|
|
|
certain documentation you encounter concerning Acegi Security might
|
|
|
still refer to <literal>ContextHolder</literal>. Generally you can
|
|
|
- just substitute "<literal>SecurityContext</literal>" for
|
|
|
- "<literal>ContextHolder</literal>" and you'll have the primary meaning
|
|
|
- of such documentation.</para>
|
|
|
+ just substitute "<literal>SecurityContextHolder</literal>" for
|
|
|
+ "<literal>ContextHolder</literal>", and
|
|
|
+ "<literal>SecurityContext</literal>" for
|
|
|
+ "<literal>SecureContext</literal>", and you'll have the primary
|
|
|
+ meaning of such documentation.</para>
|
|
|
</sect2>
|
|
|
|
|
|
<sect2 id="security-contexts-security-context">
|
|
|
<title>SecurityContext</title>
|
|
|
|
|
|
<para>The Acegi Security System for Spring uses a
|
|
|
- <literal>SecurityContext</literal> to store the
|
|
|
+ <literal>SecurityContextHolder</literal> to store the
|
|
|
+ <literal>SecurityContext</literal>. The
|
|
|
+ <literal>SecurityContext</literal> contains a single getter/setter for
|
|
|
<literal>Authentication</literal>. All Acegi Security classes query
|
|
|
- the <literal>SecurityContext</literal> for obtaining the currently
|
|
|
- principal. <literal>SecurityContext</literal> is an
|
|
|
+ the <literal>SecurityContextHolder</literal> for obtaining the current
|
|
|
+ <literal>SecurityContext</literal> (and in turn the principal).
|
|
|
+ <literal>SecurityContextHolder</literal> is an
|
|
|
<literal>InheritableThreadLocal</literal>, meaning it is associated
|
|
|
- with the current thread of execution.
|
|
|
- <literal>SecurityContext</literal> simply provides a single getter and
|
|
|
- setter pair for the <literal>Authentication</literal> object.</para>
|
|
|
+ with the current thread of execution. </para>
|
|
|
</sect2>
|
|
|
|
|
|
<sect2 id="security-contexts-storage">
|
|
|
<title>Context Storage</title>
|
|
|
|
|
|
<para>Central to Acegi Security's design is that the contents of the
|
|
|
- <literal>SecurityContext</literal> (which is simply an
|
|
|
- <literal>Authentication</literal> object) can be stored between web
|
|
|
- requests. This is so that a successfully authenticated principal can
|
|
|
- be identified on subsequent requests through the
|
|
|
- <literal>Authentication</literal> stored inside a
|
|
|
- <literal>SecurityContext</literal>. The
|
|
|
+ <literal>SecurityContextHolder</literal> (which is simply a
|
|
|
+ <literal>SecurityContext</literal> implementation) can be stored
|
|
|
+ between web requests. This is so that a successfully authenticated
|
|
|
+ principal can be identified on subsequent requests through the
|
|
|
+ <literal>Authentication</literal> stored inside the
|
|
|
+ <literal>SecurityContext</literal> obtained from the
|
|
|
+ <literal>SecurityContextHolder</literal>. The
|
|
|
<literal>HttpSessionContextIntegrationFilter</literal> exists to
|
|
|
automatically copy the contents of a well-defined
|
|
|
<literal>HttpSession</literal> attribute into the
|
|
|
- <literal>SecurityContext</literal>, then at the end of each request,
|
|
|
- copy the <literal>SecurityContext</literal> contents back into the
|
|
|
- <literal>HttpSession</literal> ready for next request.</para>
|
|
|
+ <literal>SecurityContextHolder</literal>, then at the end of each
|
|
|
+ request, copy the <literal>SecurityContextHolder</literal> contents
|
|
|
+ back into the <literal>HttpSession</literal> ready for next
|
|
|
+ request.</para>
|
|
|
|
|
|
<para>It is essential - and an extremely common error of end users -
|
|
|
that <literal>HttpSessionContextIntegrationFilter</literal> appears
|
|
|
before any other Acegi Security filter. Acegi Security filters expect
|
|
|
- to be able to modify the <literal>SecurityContext</literal> contents
|
|
|
- as they see fit, and something else (namely
|
|
|
+ to be able to modify the <literal>SecurityContextHolder</literal>
|
|
|
+ contents as they see fit, and something else (namely
|
|
|
<literal>HttpSessionContextIntegrationFilter</literal>) will store
|
|
|
those between requests if necessary. This is why
|
|
|
<literal>HttpSessionContextIntegrationFilter</literal> must be the
|
|
|
first filter used.</para>
|
|
|
+
|
|
|
+ <para>You can define a custom <literal>SecurityContext</literal>
|
|
|
+ implementation be used in your application by setting the
|
|
|
+ <literal>context</literal> property on the
|
|
|
+ <literal>HttpSessionContextIntegrationFilter</literal> bean.</para>
|
|
|
</sect2>
|
|
|
</sect1>
|
|
|
|