| 
					
				 | 
			
			
				@@ -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> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |