|
@@ -19,10 +19,10 @@
|
|
|
</para>
|
|
|
|
|
|
<section xml:id="nsa-http">
|
|
|
- <title>The <literal><http></literal> Element</title>
|
|
|
+ <title>Web Application Security - the <literal><http></literal> Element</title>
|
|
|
<para>
|
|
|
- This element encapsulates the security configuration for the web layer of your application. It creates a
|
|
|
- <classname>FilterChainProxy</classname> bean named "springSecurityFilterChain" which maintains the stack of
|
|
|
+ The <literal><http></literal> element encapsulates the security configuration for the web layer of your application.
|
|
|
+ It creates a <classname>FilterChainProxy</classname> bean named "springSecurityFilterChain" which maintains the stack of
|
|
|
security filters which make up the web security configuration <footnote><para>See the
|
|
|
<link xlink:href="#ns-web-xml"> introductory chapter</link> for how to set up the mapping from
|
|
|
your <literal>web.xml</literal></para></footnote>. Some core filters are always created and others will
|
|
@@ -459,6 +459,137 @@
|
|
|
</section>
|
|
|
</section>
|
|
|
|
|
|
- <section
|
|
|
+ <section>
|
|
|
+ <title>Authentication Services</title>
|
|
|
+ <para>
|
|
|
+ If you are using the namespace, an <interfacename>AuthenticationManager</interfacename> is
|
|
|
+ automatically registered and will be used by all the namespace-created beans which need to reference it.
|
|
|
+ The bean is an instance of Spring Security's <classname>ProviderManager</classname> class, which needs to be
|
|
|
+ configured with a list of one or more<interfacename>AuthenticationProvider</interfacename> instances.
|
|
|
+ These can either be created using syntax elements provided by the namespace, or they can be
|
|
|
+ standard bean definitions, marked for addition to the list using the
|
|
|
+ <literal>custom-authentication-provider</literal> element.
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <section>
|
|
|
+ <title>The <authentication-provider< Element</title>
|
|
|
+ <para>
|
|
|
+ This element is basically a shorthand syntax for configuring a <link xlink:href="#dao-provider"><classname>DaoAuthenticationProvider</classname></link>.
|
|
|
+ <classname>DaoAuthenticationProvider</classname> loads user information from a <interfacename>UserDetailsService</interfacename> and
|
|
|
+ compares the username/password combination with the values supplied at login. The <interfacename>UserDetailsService</interfacename> instance
|
|
|
+ can be defined either by using an available namespace element (<literal>jdbc-user-service</literal> or by using the <literal>user-service-ref</literal>
|
|
|
+ attribute to point to a bean defined elsewhere in the application context). You can find examples of these variations in the
|
|
|
+ <link xlink:href="#ns-auth-providers">namespace introduction</link>.
|
|
|
+ </para>
|
|
|
+ </section>
|
|
|
+ <section>
|
|
|
+ <title>Using <literal><custom-authentication-provider></literal> to register an AuthenticationProvider</title>
|
|
|
+ <para>
|
|
|
+ If you have written your own <interfacename>AuthenticationProvider</interfacename> implementation (or want
|
|
|
+ to configure one of Spring Security's own implementations as a traditional bean for some reason, then
|
|
|
+ you can use the following syntax to add it to the internal <classname>ProviderManager</classname>'s list:
|
|
|
+ <programlisting><![CDATA[
|
|
|
+ <bean id="myAuthenticationProvider" class="com.something.MyAuthenticationProvider">
|
|
|
+ <security:custom-authentication-provider />
|
|
|
+ </bean>
|
|
|
+ ]]></programlisting>
|
|
|
+ </para>
|
|
|
+ </section>
|
|
|
+
|
|
|
+ <section>
|
|
|
+ <title>The <literal><authentication-manager></literal> Element</title>
|
|
|
+ <para>
|
|
|
+ Since the <interfacename>AuthenticationManager</interfacename> will be automatically registered in the application
|
|
|
+ context, this element is entirely optional. It allows you to define an alias name for the internal instance for use
|
|
|
+ in your own configuration and also to supply a link to a <interfacename>ConcurrentSessionController</interfacename>
|
|
|
+ if you are configuring concurrent session control yourself rather than through the namespace (a rare requirement).
|
|
|
+ Its use is described in the <link xlink:href="#ns-auth-manager">namespace introduction</link>.
|
|
|
+ </para>
|
|
|
+ </section>
|
|
|
+
|
|
|
+ </section>
|
|
|
+
|
|
|
+ <section>
|
|
|
+ <title>Method Security</title>
|
|
|
+
|
|
|
+ <section>
|
|
|
+ <title>The <literal><global-method-security></literal> Element</title>
|
|
|
+ <para>
|
|
|
+ This element is the primary means of adding support for securing methods on Spring Security beans. Methods can
|
|
|
+ be secured by the use of annotations (defined at the interface or class level) or by defining a set of
|
|
|
+ pointcuts as child elements, using AspectJ syntax.
|
|
|
+ </para>
|
|
|
+ <para>
|
|
|
+ Method security uses the same <interfacename>AccessDecisionManager</interfacename> configuration as web security,
|
|
|
+ but this can be overridden as explained above <xref xlink:href="#nsa-access-decision-manager-ref"/>, using the same
|
|
|
+ attribute.
|
|
|
+ </para>
|
|
|
+ <section>
|
|
|
+ <title>The <literal><secured-annotations></literal> and <literal><jsr250-annotations></literal> Attributes</title>
|
|
|
+ <para>
|
|
|
+ Setting these to "true" will enable support for Spring Security's own <literal>@Secured</literal> annotations and
|
|
|
+ JSR-250 annotations, respectively. They are both disabled by default. Use of JSR-250 annotations also adds a
|
|
|
+ <classname>Jsr250Voter</classname> to the <interfacename>AccessDecisionManager</interfacename>, so you need to
|
|
|
+ make sure you do this if you are using a custom implementation and want to use these annotations.
|
|
|
+ </para>
|
|
|
+ </section>
|
|
|
+ <section>
|
|
|
+ <title>Securing Methods using <literal><protect-pointcut></literal></title>
|
|
|
+ <para>
|
|
|
+ Rather than defining security attributes on an individual method or class basis using the
|
|
|
+ <literal>@Secured</literal> annotation, you can define cross-cutting security constraints across whole
|
|
|
+ sets of methods and interfaces in your service layer using the <literal><protect-pointcut></literal>
|
|
|
+ element. This has two attributes:
|
|
|
+ <itemizedlist>
|
|
|
+ <listitem><para><literal>expression</literal> - the pointcut expression</para></listitem>
|
|
|
+ <listitem><para><literal>access</literal> - the security attributes which apply</para></listitem>
|
|
|
+ </itemizedlist>
|
|
|
+ You can find an example in the <link xlink:href="#ns-protect-pointcut">namespace introduction</link>.
|
|
|
+ </para>
|
|
|
+ </section>
|
|
|
+ </section>
|
|
|
+
|
|
|
+ <section>
|
|
|
+ <title>LDAP Namespace Options</title>
|
|
|
+ <para>
|
|
|
+ LDAP is covered in some details in <link xlink:href="#ldap">its own chapter</link>. We will expand on that
|
|
|
+ here with some explanation of how the namespace options map to Spring beans. The LDAP implementation uses
|
|
|
+ Spring LDAP extensively, so some familiarity with that project's API may be useful.
|
|
|
+ </para>
|
|
|
+ <section>
|
|
|
+ <title>Defining the LDAP Server using the <literal><ldap-server></literal> Element</title>
|
|
|
+ <para>
|
|
|
+ This element sets up a Spring LDAP <interfacename>ContextSource</interfacename> for use by the
|
|
|
+ other LDAP beans, defining the location of the LDAP server and other information (such as a username
|
|
|
+ and password, if it doesn't allow anonymous access) for connecting to it. It can also be used to
|
|
|
+ create an embedded server for testing.
|
|
|
+ Details of the syntax for both options are covered in the <link xlink:href="#ldap-server">LDAP chapter</link>.
|
|
|
+ The actual <interfacename>ContextSource</interfacename> implementation is
|
|
|
+ <classname>DefaultSpringSecurityContextSource</classname> which extends Spring LDAP's
|
|
|
+ <classname>LdapContextSource</classname> class. The <literal>manager-dn</literal> and <literal>manager-password</literal>
|
|
|
+ attributes map to the latter's <literal>userDn</literal> and <literal>password</literal> properties respectively.
|
|
|
+ </para>
|
|
|
+ <para>
|
|
|
+ If you only have one server defined in your application context, the other LDAP namespace-defined beans
|
|
|
+ will use it automatically. Otherwise, you can give the element an "id" attribute and refer to it from other
|
|
|
+ namespace beans using the <literal>server-ref</literal> attribute. This is actually the bean Id of the
|
|
|
+ <literal>ContextSource</literal> instance, if you want to use it in other traditional Spring beans.
|
|
|
+ </para>
|
|
|
+ </section>
|
|
|
+ <section>
|
|
|
+ <title>The <literal><ldap-provider> Element</literal></title>
|
|
|
+ <para>
|
|
|
+ This element is shorthand for the creation of an <classname>LdapAuthenticationProvider</classname> instance.
|
|
|
+
|
|
|
+ </para>
|
|
|
+ </section>
|
|
|
+
|
|
|
+
|
|
|
+ </section>
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ </section>
|
|
|
+
|
|
|
|
|
|
</appendix>
|