|  | @@ -1,6 +1,7 @@
 | 
	
		
			
				|  |  |  <?xml version="1.0" encoding="UTF-8"?>
 | 
	
		
			
				|  |  |  <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
 | 
	
		
			
				|  |  | -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
 | 
	
		
			
				|  |  | +               "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  <!--
 | 
	
		
			
				|  |  |   * ========================================================================
 | 
	
		
			
				|  |  |   * 
 | 
	
	
		
			
				|  | @@ -376,10 +377,10 @@
 | 
	
		
			
				|  |  |          <literal>ThreadLocal</literal> to store these details, which means
 | 
	
		
			
				|  |  |          that the security context is always available to methods in the same
 | 
	
		
			
				|  |  |          thread of execution, even if the security context is not explicitly
 | 
	
		
			
				|  |  | -        passed around as an argument those methods. Using a
 | 
	
		
			
				|  |  | +        passed around as an argument to those methods. Using a
 | 
	
		
			
				|  |  |          <literal>ThreadLocal</literal> in this way is quite safe if care is
 | 
	
		
			
				|  |  |          taken to clear the thread after the present principal's request is
 | 
	
		
			
				|  |  | -        processed. Of course, Acegi Security takes care of for you
 | 
	
		
			
				|  |  | +        processed. Of course, Acegi Security takes care of this for you
 | 
	
		
			
				|  |  |          automatically so there is no need to worry about it.</para>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          <para>Some applications aren't entirely suitable for using a
 | 
	
	
		
			
				|  | @@ -460,7 +461,7 @@ if (obj instanceof UserDetails) {
 | 
	
		
			
				|  |  |          <literal>SecurityContextHolder</literal>. The good news is that we
 | 
	
		
			
				|  |  |          provide a number of <literal>UserDetailsService</literal>
 | 
	
		
			
				|  |  |          implementations, including one that uses an in-memory map and another
 | 
	
		
			
				|  |  | -        that uses JDBC. Most users tends to write their own, though, with such
 | 
	
		
			
				|  |  | +        that uses JDBC. Most users tend to write their own, though, with such
 | 
	
		
			
				|  |  |          implementations often simply sitting on top of an existing Data Access
 | 
	
		
			
				|  |  |          Object (DAO) that represents their employees, customers, or other
 | 
	
		
			
				|  |  |          users of the enterprise application. Remember the advantage that
 | 
	
	
		
			
				|  | @@ -585,7 +586,7 @@ if (obj instanceof UserDetails) {
 | 
	
		
			
				|  |  |            <listitem>
 | 
	
		
			
				|  |  |              <para>As you're not presently authenticated, the server sends back
 | 
	
		
			
				|  |  |              a response indicating that you must authenticate. The response
 | 
	
		
			
				|  |  | -            will either be a HTTP response code, or a redirect to a particular
 | 
	
		
			
				|  |  | +            will either be an HTTP response code, or a redirect to a particular
 | 
	
		
			
				|  |  |              web page.</para>
 | 
	
		
			
				|  |  |            </listitem>
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -599,8 +600,8 @@ if (obj instanceof UserDetails) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |            <listitem>
 | 
	
		
			
				|  |  |              <para>The browser will send back a response to the server. This
 | 
	
		
			
				|  |  | -            will either be a HTTP POST containing the contents of the form
 | 
	
		
			
				|  |  | -            that you filled out, or a HTTP header containing your
 | 
	
		
			
				|  |  | +            will either be an HTTP POST containing the contents of the form
 | 
	
		
			
				|  |  | +            that you filled out, or an HTTP header containing your
 | 
	
		
			
				|  |  |              authentication details.</para>
 | 
	
		
			
				|  |  |            </listitem>
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -616,7 +617,7 @@ if (obj instanceof UserDetails) {
 | 
	
		
			
				|  |  |              authentication process will be retried. Hopefully you've
 | 
	
		
			
				|  |  |              authenticated with sufficient granted authorities to access the
 | 
	
		
			
				|  |  |              protected resource. If you have sufficient access, the request
 | 
	
		
			
				|  |  | -            will be successful. Otherwise, you'll receive back a HTTP error
 | 
	
		
			
				|  |  | +            will be successful. Otherwise, you'll receive back an HTTP error
 | 
	
		
			
				|  |  |              code 403, which means "forbidden".</para>
 | 
	
		
			
				|  |  |            </listitem>
 | 
	
		
			
				|  |  |          </orderedlist>
 | 
	
	
		
			
				|  | @@ -653,21 +654,21 @@ if (obj instanceof UserDetails) {
 | 
	
		
			
				|  |  |          three.</para>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          <para>After your browser decides to submit your authentication
 | 
	
		
			
				|  |  | -        credentials (either as a HTTP form post or HTTP header) there needs to
 | 
	
		
			
				|  |  | +        credentials (either as an HTTP form post or HTTP header) there needs to
 | 
	
		
			
				|  |  |          be something on the server that "collects" these authentication
 | 
	
		
			
				|  |  |          details. By now we're at step six in the above list. In Acegi Security
 | 
	
		
			
				|  |  | -        was have a special name for the function of collecting authentication
 | 
	
		
			
				|  |  | +        we have a special name for the function of collecting authentication
 | 
	
		
			
				|  |  |          details from a user agent (usually a web browser), and that name is
 | 
	
		
			
				|  |  |          "authentication mechanism". After the authentication details are
 | 
	
		
			
				|  |  |          collected from the user agent, an "<literal>Authentication</literal>
 | 
	
		
			
				|  |  |          request" object is built and then presented to an
 | 
	
		
			
				|  |  | -        AuthenticationProvider.</para>
 | 
	
		
			
				|  |  | +        <interfacename>AuthenticationProvider</interfacename>.</para>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          <para>The last played in the Acegi Security authentication process is
 | 
	
		
			
				|  |  |          an <literal>AuthenticationProvider</literal>. Quite simply, it is
 | 
	
		
			
				|  |  |          responsible for taking an <literal>Authentication</literal> request
 | 
	
		
			
				|  |  |          object and deciding whether or not it is valid. The provider will
 | 
	
		
			
				|  |  | -        either throw an exception, or return a fully populated
 | 
	
		
			
				|  |  | +        either throw an exception or return a fully populated
 | 
	
		
			
				|  |  |          <literal>Authentication</literal> object. Remember our good friends,
 | 
	
		
			
				|  |  |          <literal>UserDetails</literal> and
 | 
	
		
			
				|  |  |          <literal>UserDetailsService</literal>? If not, head back to the
 | 
	
	
		
			
				|  | @@ -714,7 +715,7 @@ if (obj instanceof UserDetails) {
 | 
	
		
			
				|  |  |          filter (or equivalent) that reads the third-party user information
 | 
	
		
			
				|  |  |          from a location, build an Acegi Security-specific Authentication
 | 
	
		
			
				|  |  |          object, and put it onto the SecurityContextHolder. It's quite easy to
 | 
	
		
			
				|  |  | -        do this, and a fully-supported integration approach.</para>
 | 
	
		
			
				|  |  | +        do this, and it is a fully-supported integration approach.</para>
 | 
	
		
			
				|  |  |        </sect1>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        <sect1 id="secure-objects">
 | 
	
	
		
			
				|  | @@ -753,7 +754,7 @@ if (obj instanceof UserDetails) {
 | 
	
		
			
				|  |  |          authorization on the services layer.</para>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          <para>Acegi Security uses the term "secure object" to refer to any
 | 
	
		
			
				|  |  | -        object that can have security applies to it. Each secure object
 | 
	
		
			
				|  |  | +        object that can have security applied to it. Each secure object
 | 
	
		
			
				|  |  |          supported by Acegi Security has its own class, which is a subclass of
 | 
	
		
			
				|  |  |          <literal>AbstractSecurityInterceptor</literal>. Importantly, by the
 | 
	
		
			
				|  |  |          time the <literal>AbstractSecurityInterceptor</literal> is run, the
 | 
	
	
		
			
				|  | @@ -767,8 +768,8 @@ if (obj instanceof UserDetails) {
 | 
	
		
			
				|  |  |          present request. A "configuration attribute" can be thought of as a
 | 
	
		
			
				|  |  |          String that has special meaning to the classes used by
 | 
	
		
			
				|  |  |          <literal>AbstractSecurityInterceptor</literal>. They're normally
 | 
	
		
			
				|  |  | -        configured against your AbstractSecurityInterceptor using XML. Anyway,
 | 
	
		
			
				|  |  | -        the <literal>AbstractSecurityInterceptor</literal> will ask an
 | 
	
		
			
				|  |  | +        configured against your <literal>AbstractSecurityInterceptor</literal>
 | 
	
		
			
				|  |  | +        using XML. Anyway, the <literal>AbstractSecurityInterceptor</literal> will ask an
 | 
	
		
			
				|  |  |          <literal>AccessDecisionManager</literal> "here's the configuration
 | 
	
		
			
				|  |  |          attributes, here's the current <literal>Authentication</literal>
 | 
	
		
			
				|  |  |          object, and here's details of the current request - is this particular
 | 
	
	
		
			
				|  | @@ -1133,7 +1134,7 @@ if (obj instanceof UserDetails) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |            <listitem>
 | 
	
		
			
				|  |  |              <para><literal>ExceptionTranslationFilter</literal>, to catch any
 | 
	
		
			
				|  |  | -            Acegi Security exceptions so that either a HTTP error response can
 | 
	
		
			
				|  |  | +            Acegi Security exceptions so that either an HTTP error response can
 | 
	
		
			
				|  |  |              be returned or an appropriate
 | 
	
		
			
				|  |  |              <literal>AuthenticationEntryPoint</literal> can be launched</para>
 | 
	
		
			
				|  |  |            </listitem>
 | 
	
	
		
			
				|  | @@ -1189,8 +1190,8 @@ if (obj instanceof UserDetails) {
 | 
	
		
			
				|  |  |          request. This means the <literal>jsessionid</literal> is never sent
 | 
	
		
			
				|  |  |          across an insecure channel. You will need to ensure your
 | 
	
		
			
				|  |  |          <literal>web.xml</literal>-defined
 | 
	
		
			
				|  |  | -        <literal><welcome-file></literal> points to a HTTPS location,
 | 
	
		
			
				|  |  | -        and the application never directs the user to a HTTP location. Acegi
 | 
	
		
			
				|  |  | +        <literal><welcome-file></literal> points to an HTTPS location,
 | 
	
		
			
				|  |  | +        and the application never directs the user to an HTTP location. Acegi
 | 
	
		
			
				|  |  |          Security provides a solution to assist with the latter.</para>
 | 
	
		
			
				|  |  |        </sect1>
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -1333,7 +1334,7 @@ if (obj instanceof UserDetails) {
 | 
	
		
			
				|  |  |          designed to handle authenticated requests. The latter therefore has
 | 
	
		
			
				|  |  |          access to the granted authorities of the authenticated principal. In
 | 
	
		
			
				|  |  |          addition, problems detected by a <literal>ChannelProcessor</literal>
 | 
	
		
			
				|  |  | -        will generally cause a HTTP/HTTPS redirection so its requirements can
 | 
	
		
			
				|  |  | +        will generally cause an HTTP/HTTPS redirection so its requirements can
 | 
	
		
			
				|  |  |          be met, whilst problems detected by an
 | 
	
		
			
				|  |  |          <literal>AccessDecisionVoter</literal> will ultimately result in an
 | 
	
		
			
				|  |  |          <literal>AccessDeniedException</literal> (depending on the governing
 | 
	
	
		
			
				|  | @@ -1431,7 +1432,7 @@ if (obj instanceof UserDetails) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          <para>The above declarations will cause every web request to be passed
 | 
	
		
			
				|  |  |          through to Acegi Security's FilterChainProxy. As explained in the
 | 
	
		
			
				|  |  | -        filters section of this reference guide, the FilterChainProxy is a
 | 
	
		
			
				|  |  | +        filters section of this reference guide, the <classname>FilterChainProxy</classname> is a
 | 
	
		
			
				|  |  |          generally-useful class that enables web requests to be passed to
 | 
	
		
			
				|  |  |          different filters based on the URL patterns. Those delegated filters
 | 
	
		
			
				|  |  |          are managed inside the application context, so they can benefit from
 | 
	
	
		
			
				|  | @@ -1480,7 +1481,7 @@ if (obj instanceof UserDetails) {
 | 
	
		
			
				|  |  |          <para>Recall that
 | 
	
		
			
				|  |  |          <literal>HttpSessionContextIntegrationFilter</literal> keeps the
 | 
	
		
			
				|  |  |          contents of the <literal>SecurityContext</literal> between invocations
 | 
	
		
			
				|  |  | -        inside a HTTP session. This means the authentication mechanisms are
 | 
	
		
			
				|  |  | +        inside an HTTP session. This means the authentication mechanisms are
 | 
	
		
			
				|  |  |          only used once, being when the principal initially tries to
 | 
	
		
			
				|  |  |          authenticate. The rest of the time the authentication mechanisms sit
 | 
	
		
			
				|  |  |          there and silently pass the request through to the next filter in the
 | 
	
	
		
			
				|  | @@ -1512,10 +1513,10 @@ if (obj instanceof UserDetails) {
 | 
	
		
			
				|  |  |          <literal>AuthenticationManager</literal>?". We haven't explored it
 | 
	
		
			
				|  |  |          before, but we have discussed the concept of an
 | 
	
		
			
				|  |  |          <literal>AuthenticationProvider</literal>. Quite simply, an
 | 
	
		
			
				|  |  | -        AuthenticationManager is responsible for passing requests through a
 | 
	
		
			
				|  |  | +        <interfacename>AuthenticationManager</interfacename> is responsible for passing requests through a
 | 
	
		
			
				|  |  |          chain of AuthenticationProviders. It's a little like the filter chain
 | 
	
		
			
				|  |  |          we discussed earlier, although there are some differences. There is
 | 
	
		
			
				|  |  | -        only one AuthenticationManager implementation shipped with Acegi
 | 
	
		
			
				|  |  | +        only one <interfacename>AuthenticationManager</interfacename> implementation shipped with Acegi
 | 
	
		
			
				|  |  |          Security, so let's look at how it's configured for the example we're
 | 
	
		
			
				|  |  |          using in this chapter:</para>
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -1576,7 +1577,7 @@ if (obj instanceof UserDetails) {
 | 
	
		
			
				|  |  |          <literal>ProviderManager</literal>, your last step is to configure an
 | 
	
		
			
				|  |  |          <literal>AuthenticationEntryPoint</literal>. Recall that earlier we
 | 
	
		
			
				|  |  |          discussed the role of <literal>ExceptionTranslationFilter</literal>,
 | 
	
		
			
				|  |  | -        which is used when HTTP-based requests should receive back a HTTP
 | 
	
		
			
				|  |  | +        which is used when HTTP-based requests should receive back an HTTP
 | 
	
		
			
				|  |  |          header or HTTP redirect in order to start authentication. Continuing
 | 
	
		
			
				|  |  |          on with our earlier example:</para>
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -1699,7 +1700,7 @@ if (obj instanceof UserDetails) {
 | 
	
		
			
				|  |  |            in the second or any subsequent token. Any remaining tokens are
 | 
	
		
			
				|  |  |            treated as granted authorities, which are created as
 | 
	
		
			
				|  |  |            <literal>GrantedAuthorityImpl</literal> objects (this is just for
 | 
	
		
			
				|  |  | -          your reference - most application don't need custom
 | 
	
		
			
				|  |  | +          your reference - most applications don't need custom
 | 
	
		
			
				|  |  |            <literal>GrantedAuthority</literal> implementations, so using the
 | 
	
		
			
				|  |  |            default implementation in this manner is just fine). Note that if a
 | 
	
		
			
				|  |  |            user has no password and/or no granted authorities, the user will
 | 
	
	
		
			
				|  | @@ -1750,7 +1751,7 @@ if (obj instanceof UserDetails) {
 | 
	
		
			
				|  |  |            be used as indicated in <literal>dbinit.txt</literal>. You can
 | 
	
		
			
				|  |  |            download this file from the Acegi Security web site.</para>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -          <para>If you default schema is unsuitable for your needs,
 | 
	
		
			
				|  |  | +          <para>If your default schema is unsuitable for your needs,
 | 
	
		
			
				|  |  |            <literal>JdbcDaoImpl</literal> provides two properties that allow
 | 
	
		
			
				|  |  |            customisation of the SQL statements. You may also subclass the
 | 
	
		
			
				|  |  |            <literal>JdbcDaoImpl</literal> if further customisation is
 | 
	
	
		
			
				|  | @@ -1786,7 +1787,7 @@ if (obj instanceof UserDetails) {
 | 
	
		
			
				|  |  |          <para>In addition, you will need to add the
 | 
	
		
			
				|  |  |          <literal>org.acegisecurity.concurrent.ConcurrentSessionFilter</literal>
 | 
	
		
			
				|  |  |          to your <literal>FilterChainProxy</literal>. The
 | 
	
		
			
				|  |  | -        ConcurrentSessionFilter requires two properties,
 | 
	
		
			
				|  |  | +        <classname>ConcurrentSessionFilter</classname> requires two properties,
 | 
	
		
			
				|  |  |          <literal>sessionRegistry</literal>, which generally points to an
 | 
	
		
			
				|  |  |          instance of <literal>SessionRegistryImpl</literal>, and
 | 
	
		
			
				|  |  |          <literal>expiredUrl</literal>, which points to the page to display
 | 
	
	
		
			
				|  | @@ -2387,7 +2388,7 @@ public boolean supports(Class clazz);</programlisting></para>
 | 
	
		
			
				|  |  |          Authentication is an attractive approach to authentication, because it
 | 
	
		
			
				|  |  |          is very widely deployed in user agents and implementation is extremely
 | 
	
		
			
				|  |  |          simple (it's just a Base64 encoding of the username:password,
 | 
	
		
			
				|  |  | -        specified in a HTTP header).</para>
 | 
	
		
			
				|  |  | +        specified in an HTTP header).</para>
 | 
	
		
			
				|  |  |        </sect1>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        <sect1 id="basic-config">
 | 
	
	
		
			
				|  | @@ -3376,7 +3377,7 @@ key:              A private key to prevent modification of the remember-me token
 | 
	
		
			
				|  |  |              implementation. Acegi Security includes one implementation, the
 | 
	
		
			
				|  |  |              <literal>CasProxyTicketValidator</literal>. This implementation a
 | 
	
		
			
				|  |  |              ticket validation class included in the CAS client library. The
 | 
	
		
			
				|  |  | -            <literal>CasProxyTicketValidator</literal> makes a HTTPS request
 | 
	
		
			
				|  |  | +            <literal>CasProxyTicketValidator</literal> makes an HTTPS request
 | 
	
		
			
				|  |  |              to the CAS server in order to validate the service ticket. The
 | 
	
		
			
				|  |  |              <literal>CasProxyTicketValidator</literal> may also include a
 | 
	
		
			
				|  |  |              proxy callback URL, which is included in this example:
 | 
	
	
		
			
				|  | @@ -3582,7 +3583,7 @@ key:              A private key to prevent modification of the remember-me token
 | 
	
		
			
				|  |  |            your servlet container.</para>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |            <para>Note CAS heavily relies on HTTPS. You can't even test the
 | 
	
		
			
				|  |  | -          system without a HTTPS certificate. Whilst you should refer to your
 | 
	
		
			
				|  |  | +          system without an HTTPS certificate. Whilst you should refer to your
 | 
	
		
			
				|  |  |            web container's documentation on setting up HTTPS, if you need some
 | 
	
		
			
				|  |  |            additional help or a test certificate you might like to check the
 | 
	
		
			
				|  |  |            <literal>samples/contacts/etc/ssl</literal> directory</para>
 | 
	
	
		
			
				|  | @@ -3671,7 +3672,7 @@ key:              A private key to prevent modification of the remember-me token
 | 
	
		
			
				|  |  |            deployment to your servlet container.</para>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |            <para>Note CAS heavily relies on HTTPS. You can't even test the
 | 
	
		
			
				|  |  | -          system without a HTTPS certificate. Whilst you should refer to your
 | 
	
		
			
				|  |  | +          system without an HTTPS certificate. Whilst you should refer to your
 | 
	
		
			
				|  |  |            web container's documentation on setting up HTTPS, if you need some
 | 
	
		
			
				|  |  |            additional help or a test certificate you might like to check the
 | 
	
		
			
				|  |  |            CAS documentation on setting up SSL:
 |