@ -131,6 +131,19 @@
<classname > FilterSecurityInterceptor</classname> . Defaults to "true".
<classname > FilterSecurityInterceptor</classname> . Defaults to "true".
</para>
</para>
</section>
</section>
<section xml:id= "create-session" >
<title > <literal > create-session</literal> </title>
<para >
Controls the eagerness with which an HTTP session is created. If not set, defaults to "ifRequired". Other options are "always" and "never".
The setting of this attribute affect the <literal > allowSessionCreation</literal> and <literal > forceEagerSessionCreation</literal>
properties of <classname > HttpSessionContextIntegrationFilter</classname> . <literal > allowSessionCreation</literal> will always be true unless
this attribute is set to "never". <literal > forceEagerSessionCreation</literal> is "false" unless it is set to "always".
So the default configuration allows session creation but does not force it. The exception is if concurrent session control is enabled,
when <literal > forceEagerSessionCreation</literal> will be set to true, regardless of what the setting is here. Using "never" would
then cause an exception during the initialization of <classname > HttpSessionContextIntegrationFilter</classname> .
</para>
</section>
</section>
</section>
<section >
<section >
@ -170,7 +183,7 @@
Can be "http" or "https" depending on whether a particular URL pattern should be accessed over HTTP or HTTPS respectively. Alternatively
Can be "http" or "https" depending on whether a particular URL pattern should be accessed over HTTP or HTTPS respectively. Alternatively
the value "any" can be used when there is no preference. If this attribute is present on any <literal > < intercept-url> </literal>
the value "any" can be used when there is no preference. If this attribute is present on any <literal > < intercept-url> </literal>
element, then a <classname > ChannelProcessingFilter</classname> will be added to the filter stack and its additional dependencies added
element, then a <classname > ChannelProcessingFilter</classname> will be added to the filter stack and its additional dependencies added
to the application context. See the <link xlink:href= "channel-security-config" > chapter on channel security</link> for an
to the application context. See the chapter on <link xlink:href= "# channel-security-config" > channel security</link> for an
example configuration using traditional beans.
example configuration using traditional beans.
</para>
</para>
<para >
<para >
@ -324,33 +337,128 @@
<section xml:id= "nsa-concurrent-session-control" >
<section xml:id= "nsa-concurrent-session-control" >
<title > The <literal > < concurrent-session-control> </literal> Element</title>
<title > The <literal > < concurrent-session-control> </literal> Element</title>
<para >
<para >
Adds support for concurrent session control, allowing limits to be placed on the number of active sessions a user can have.
A <classname > ConcurrentSessionFilter</classname> will be created, along with a <classname > ConcurrentSessionControllerImpl</classname>
and an instance of <interfacename > SessionRegistry</interfacename> (a <classname > SessionRegistryImpl</classname> instance unless the user
wishes to use a custom bean). The controller is registered with the namespace's <interfacename > AuthenticationManager</interfacename>
(<classname > ProviderManager</classname> ). Other namespace-created beans which require a reference to the <interfacename > SessionRegistry</interfacename>
will automatically have it injected.
</para>
<para >
Note that the <literal > forceEagerSessionCreation</literal> of <classname > HttpSessionContextIntegrationFilter</classname> will
be set to <literal > true</literal> if concurrent session control is in use.
</para>
<section >
<title > The <literal > max-sessions</literal> attribute</title>
<para > Maps to the <literal > maximumSessions</literal> property of <classname > ConcurrentSessionControllerImpl</classname> .</para>
</section>
<section >
<title > The <literal > expired-url</literal> attribute</title>
<para >
The URL a user will be redirected to if they attempt to use a session which has been "expired" by
the concurrent session controller because the user has exceeded the number of allowed sessions and has logged
in again elsewhere. Should be set unless <literal > exception-if-maximum-exceeded</literal> is set.
If no value is supplied, an expiry message will just be written directly back to the response.
</para>
</section>
<section >
<title > The <literal > exception-if-maximum-exceeded</literal> attribute</title>
<para > If set to "true" a <exceptionname > ConcurrentLoginException</exceptionname> should be raised when a user
attempts to exceed the maximum allowed number of sessions. The default behaviour is to expire the original session.
</para>
</section>
<section >
<title > The <literal > session-registry-alias</literal> and <literal > session-registry-ref</literal> attributes</title>
<para >
The user can supply their own <interfacename > SessionRegistry</interfacename> implementation using the
<literal > session-registry-ref</literal> attribute. The other concurrent session control beans will be wired
up to use it.
</para>
<para >
It can also be useful to have a reference to the internal session registry for use in your own
beans or an admin interface. You can expose the interal bean using the <literal > session-registry-alias</literal>
attribute, giving it a name that you can use elsewhere in your configuration.
</para>
</para>
</section>
</section>
</section>
<section xml:id= "nsa-anonymous" >
<section xml:id= "nsa-anonymous" >
<title > The <literal > < anonymous> </literal> Element</title>
<title > The <literal > < anonymous> </literal> Element</title>
<para >
<para >
Adds an <classname > AnonymousProcessingFilter</classname> to the stack and an <classname > AnonymousAuthenticationProvider</classname> .
Required if you are using the <literal > IS_AUTHENTICATED_ANONYMOUSLY</literal> attribute.
</para>
</para>
</section>
</section>
<section xml:id= "nsa-x509" >
<section xml:id= "nsa-x509" >
<title > The <literal > < x509> </literal> Element</title>
<title > The <literal > < x509> </literal> Element</title>
<para >
<para >
Adds support for X.509 authentication. An <classname > X509PreAuthenticatedProcessingFilter</classname> will be
added to the stack and a <classname > PreAuthenticatedProcessingFilterEntryPoint</classname> bean will be created. The
latter will only be used if no other authentication mechanisms are in use (it's only functionality is to return an HTTP
403 error code). A <classname > PreAuthenticatedAuthenticationProvider</classname> will also be created which delegates the
loading of user authorities to a <interfacename > UserDetailsService</interfacename> .
</para>
<section >
<title > The <literal > subject-principal-regex</literal> attribute</title>
<para >
Defines a regular expression which will be used to extract the username from the certificate (for use with the
<interfacename > UserDetailsService</interfacename> ).
</para>
</section>
<section >
<title > The <literal > user-service-ref</literal> attribute</title>
<para >
Allows a specific <interfacename > UserDetailsService</interfacename> to be used with X.509 in the case where
multiple instances are configured. If not set, an attempt will be made to locate a suitable instance automatically and
use that.
</para>
</para>
</section>
</section>
</section>
<section xml:id= "nsa-openid-login" >
<section xml:id= "nsa-openid-login" >
<title > The <literal > < openid-login> </literal> Element</title>
<title > The <literal > < openid-login> </literal> Element</title>
<para >
<para >
Similar to <literal > < form-login> </literal> and has the same attributes. The default value for <literal > login-processing-url</literal>
is "/j_spring_openid_security_check". An <classname > OpenIDAuthenticationProcessingFilter</classname> and <classname > OpenIDAuthenticationProvider</classname>
will be registered. The latter requires a reference to a <interfacename > UserDetailsService</interfacename> . Again, this can be
specified by Id, using the <literal > user-service-ref</literal> attribute, or will be located automatically in the application context.
</para>
</para>
</section>
</section>
<section xml:id= "nsa-logout" >
<section xml:id= "nsa-logout" >
<title > The <literal > < logout> </literal> Element</title>
<title > The <literal > < logout> </literal> Element</title>
<para >
<para >
Adds a <classname > LogoutFilter</classname> to the filter stack. This is configured
with a <classname > SecurityContextLogoutHandler</classname> .
</para>
<section >
<title > The <literal > logout-url</literal> attribute</title>
<para >
The URL which will cause a logout (i.e. which will be processed by the filter). Defaults to "/j_spring_security_logout".
</para>
</para>
</section>
</section>
<section >
<title > The <literal > logout-success-url</literal> attribute</title>
<para >
The destination URL which the user will be taken to after logging out. Defaults to "/".
</para>
</section>
<section >
<title > The <literal > invalidate-session</literal> attribute</title>
<para >
Maps to the <literal > invalidateHttpSession</literal> of the <classname > SecurityContextLogoutHandler</classname> .
Defaults to "true", so the session will be invalidated on logout.
</para>
</section>
</section>
</section>
</section>
<section
</appendix>
</appendix>