From 31e2319f8a728819025369285838855e4b6e60f2 Mon Sep 17 00:00:00 2001 From: Luke Taylor Date: Sun, 7 Jun 2009 21:00:50 +0000 Subject: [PATCH] manual reorganization --- .../manual/src/docbook/appendix-db-schema.xml | 17 +- .../src/docbook/authorization-common.xml | 18 +- .../src/docbook/basic-authentication.xml | 22 +- docs/manual/src/docbook/cas-auth-provider.xml | 12 +- docs/manual/src/docbook/channel-security.xml | 25 +- .../src/docbook/common-auth-services.xml | 78 +- docs/manual/src/docbook/dao-auth-provider.xml | 3 +- .../src/docbook/digest-authentication.xml | 8 +- .../src/docbook/form-authentication.xml | 69 +- .../images/ACLSecurity.gif | Bin .../images/AccessDecisionVoting.gif | Bin .../images/AfterInvocation.gif | Bin .../images/Authentication.gif | Bin .../images/BasicAclProvider.gif | Bin .../{resources => docbook}/images/Context.gif | Bin .../images/Permissions.gif | Bin .../images/SecurityInterception.gif | Bin .../{resources => docbook}/images/logo.gif | Bin .../images/s2-banner-rhs.png | Bin .../images/s2_box_logo.png | Bin .../images/security-interception.graffle | Bin 0 -> 93236 bytes .../docbook/images/security-interception.png | Bin 0 -> 69636 bytes .../images/xdev-spring_logo.jpg | Bin docs/manual/src/docbook/introduction.xml | 527 ++++---- .../manual/src/docbook/jaas-auth-provider.xml | 18 +- .../manual/src/docbook/ldap-auth-provider.xml | 68 +- docs/manual/src/docbook/namespace-config.xml | 59 +- docs/manual/src/docbook/preauth.xml | 8 +- .../docbook/remember-me-authentication.xml | 31 +- .../src/docbook/runas-auth-provider.xml | 6 +- docs/manual/src/docbook/secured-objects.xml | 14 +- docs/manual/src/docbook/springsecurity.xml | 24 +- .../src/docbook/supporting-infrastructure.xml | 38 +- .../manual/src/docbook/technical-overview.xml | 1090 ++++++++--------- docs/manual/src/resources/css/highlight.css | 35 + docs/manual/src/resources/css/manual.css | 59 + .../src/resources/images/i21-banner-rhs.jpg | Bin 10504 -> 0 bytes docs/manual/src/resources/images/logo.psd | Bin 149793 -> 0 bytes docs/manual/src/xsl/html-custom.xsl | 142 +++ docs/manual/src/xsl/pdf-custom.xsl | 501 ++++++++ 40 files changed, 1798 insertions(+), 1074 deletions(-) rename docs/manual/src/{resources => docbook}/images/ACLSecurity.gif (100%) rename docs/manual/src/{resources => docbook}/images/AccessDecisionVoting.gif (100%) rename docs/manual/src/{resources => docbook}/images/AfterInvocation.gif (100%) rename docs/manual/src/{resources => docbook}/images/Authentication.gif (100%) rename docs/manual/src/{resources => docbook}/images/BasicAclProvider.gif (100%) rename docs/manual/src/{resources => docbook}/images/Context.gif (100%) rename docs/manual/src/{resources => docbook}/images/Permissions.gif (100%) rename docs/manual/src/{resources => docbook}/images/SecurityInterception.gif (100%) rename docs/manual/src/{resources => docbook}/images/logo.gif (100%) rename docs/manual/src/{resources => docbook}/images/s2-banner-rhs.png (100%) rename docs/manual/src/{resources => docbook}/images/s2_box_logo.png (100%) create mode 100644 docs/manual/src/docbook/images/security-interception.graffle create mode 100644 docs/manual/src/docbook/images/security-interception.png rename docs/manual/src/{resources => docbook}/images/xdev-spring_logo.jpg (100%) create mode 100644 docs/manual/src/resources/css/highlight.css create mode 100644 docs/manual/src/resources/css/manual.css delete mode 100644 docs/manual/src/resources/images/i21-banner-rhs.jpg delete mode 100644 docs/manual/src/resources/images/logo.psd create mode 100644 docs/manual/src/xsl/html-custom.xsl create mode 100644 docs/manual/src/xsl/pdf-custom.xsl diff --git a/docs/manual/src/docbook/appendix-db-schema.xml b/docs/manual/src/docbook/appendix-db-schema.xml index da381000ee..0420d9fa37 100644 --- a/docs/manual/src/docbook/appendix-db-schema.xml +++ b/docs/manual/src/docbook/appendix-db-schema.xml @@ -24,7 +24,7 @@ username varchar_ignorecase(50) not null, authority varchar_ignorecase(50) not null, constraint fk_authorities_users foreign key(username) references users(username)); - create unique index ix_auth_username on authorities (username,authority);; + create unique index ix_auth_username on authorities (username,authority);
Group Authorities @@ -121,8 +121,10 @@ create table acl_entry ( id bigint generated by default as identity(start with 100) not null primary key, acl_object_identity bigint not null,ace_order int not null,sid bigint not null, mask integer not null,granting boolean not null,audit_success boolean not null, - audit_failure boolean not null,constraint unique_uk_4 unique(acl_object_identity,ace_order), - constraint foreign_fk_4 foreign key(acl_object_identity) references acl_object_identity(id), + audit_failure boolean not null, + constraint unique_uk_4 unique(acl_object_identity,ace_order), + constraint foreign_fk_4 foreign key(acl_object_identity) + references acl_object_identity(id), constraint foreign_fk_5 foreign key(sid) references acl_sid(id) ); @@ -148,9 +150,9 @@ create table acl_object_identity( owner_sid bigint, entries_inheriting boolean not null, constraint unique_uk_3 unique(object_id_class,object_id_identity), - constraint foreign_fk_1 foreign key(parent_object)references acl_object_identity(id), - constraint foreign_fk_2 foreign key(object_id_class)references acl_class(id), - constraint foreign_fk_3 foreign key(owner_sid)references acl_sid(id)); + constraint foreign_fk_1 foreign key(parent_object) references acl_object_identity(id), + constraint foreign_fk_2 foreign key(object_id_class) references acl_class(id), + constraint foreign_fk_3 foreign key(owner_sid) references acl_sid(id)); create table acl_entry( id bigserial primary key, @@ -162,7 +164,8 @@ create table acl_entry( audit_success boolean not null, audit_failure boolean not null, constraint unique_uk_4 unique(acl_object_identity,ace_order), - constraint foreign_fk_4 foreign key(acl_object_identity) references acl_object_identity(id), + constraint foreign_fk_4 foreign key(acl_object_identity) + references acl_object_identity(id), constraint foreign_fk_5 foreign key(sid) references acl_sid(id)); diff --git a/docs/manual/src/docbook/authorization-common.xml b/docs/manual/src/docbook/authorization-common.xml index 9ee0b1d36e..b0e5aefaa6 100644 --- a/docs/manual/src/docbook/authorization-common.xml +++ b/docs/manual/src/docbook/authorization-common.xml @@ -70,7 +70,8 @@ AccessDecisionManager interface contains three methods: - void decide(Authentication authentication, Object secureObject, List<ConfigAttribute> config) throws AccessDeniedException; + void decide(Authentication authentication, Object secureObject, + List<ConfigAttribute> config) throws AccessDeniedException; boolean supports(ConfigAttribute attribute); boolean supports(Class clazz); @@ -106,11 +107,13 @@
Voting Decision Manager + + +
@@ -227,11 +230,8 @@ boolean supports(Class clazz);
After Invocation Implementation - - - - - + + @@ -319,7 +319,7 @@ boolean supports(Class clazz); follows: + class="org.springframework.security.acls.afterinvocation.AclEntryAfterInvocationCollectionFilteringProvider"> diff --git a/docs/manual/src/docbook/basic-authentication.xml b/docs/manual/src/docbook/basic-authentication.xml index a1776af877..225f91725d 100644 --- a/docs/manual/src/docbook/basic-authentication.xml +++ b/docs/manual/src/docbook/basic-authentication.xml @@ -27,17 +27,17 @@ BasicProcessingFilter and its required collaborator: - - <bean id="basicProcessingFilter" class="org.springframework.security.web.authentication.www.BasicProcessingFilter"> - <property name="authenticationManager"><ref bean="authenticationManager"/></property> - <property name="authenticationEntryPoint"><ref bean="authenticationEntryPoint"/></property> - </bean> - - <bean id="authenticationEntryPoint" - class="org.springframework.security.web.authentication.www.BasicProcessingFilterEntryPoint"> - <property name="realmName"><value>Name Of Your Realm</value></property> - </bean> - + + + + + + + +]]> The configured AuthenticationManager diff --git a/docs/manual/src/docbook/cas-auth-provider.xml b/docs/manual/src/docbook/cas-auth-provider.xml index 2bcc394dfe..6c43334998 100644 --- a/docs/manual/src/docbook/cas-auth-provider.xml +++ b/docs/manual/src/docbook/cas-auth-provider.xml @@ -274,8 +274,10 @@ to your application context. This represents your service: - + + ]]> @@ -294,7 +296,8 @@ - + @@ -335,7 +338,8 @@ Next you need to add a CasAuthenticationProvider and its collaborators: + diff --git a/docs/manual/src/docbook/channel-security.xml b/docs/manual/src/docbook/channel-security.xml index 198faed75d..096f4777b2 100644 --- a/docs/manual/src/docbook/channel-security.xml +++ b/docs/manual/src/docbook/channel-security.xml @@ -38,23 +38,28 @@ Configuration Channel security is supported by the security namespace by means of the requires-channel attribute on the <intercept-url> - element and this is the simplest (and recommended approach) + element and this is the simplest (and recommended approach). To confiure channel security explicitly, you would define the following the filter in your application context: + - + - - - + + + - + @@ -63,8 +68,10 @@ - -]]> + +]]> Like FilterSecurityInterceptor, Apache Ant style paths are also supported by the diff --git a/docs/manual/src/docbook/common-auth-services.xml b/docs/manual/src/docbook/common-auth-services.xml index 1deb413c69..1b5f1b2ff0 100644 --- a/docs/manual/src/docbook/common-auth-services.xml +++ b/docs/manual/src/docbook/common-auth-services.xml @@ -48,7 +48,17 @@ - + ]]> @@ -123,16 +133,17 @@ shipped with Spring Security, so let's look at how it's configured for the example we're using in this chapter: - <bean id="authenticationManager" - class="org.springframework.security.authentication.ProviderManager"> -<property name="providers"> -<list> - <ref local="daoAuthenticationProvider"/> - <ref local="anonymousAuthenticationProvider"/> - <ref local="rememberMeAuthenticationProvider"/> -</list> -</property> -</bean> + + + + + + + + +]]> It's probably worth mentioning at this point that your authentication mechanisms (which are usually filters) are also @@ -187,8 +198,8 @@ - + class="org.springframework.security.web.access.ExceptionTranslationFilter"> + @@ -196,10 +207,10 @@ - + - < value="false"/> + ]]> Notice that the ExceptionTranslationFilter @@ -288,17 +299,16 @@ use the user-service element from the security namespace: - - - + + + + ]]> This also suppots the use of an external properties file: - ]]> - + + ]]> The properties file should contain entries in the form username=password,grantedAuthority[,grantedAuthority][,enabled|disabled] @@ -363,7 +373,8 @@ authority VARCHAR(50) NOT NULL ); - ALTER TABLE authorities ADD CONSTRAINT fk_authorities_users foreign key (username) REFERENCES users(username); + ALTER TABLE authorities ADD CONSTRAINT fk_authorities_users \ + foreign key (username) REFERENCES users(username); @@ -394,10 +405,12 @@ To use concurrent session support, you'll need to add the following to web.xml: - -<listener> - <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class> -</listener> + + + org.springframework.security.web.session.HttpSessionEventPublisher + + ]]> @@ -424,7 +437,7 @@ @@ -432,11 +445,12 @@ - + - + ]]> diff --git a/docs/manual/src/docbook/dao-auth-provider.xml b/docs/manual/src/docbook/dao-auth-provider.xml index fa809ea9b6..46019d9995 100644 --- a/docs/manual/src/docbook/dao-auth-provider.xml +++ b/docs/manual/src/docbook/dao-auth-provider.xml @@ -85,7 +85,8 @@ - + ]]> diff --git a/docs/manual/src/docbook/digest-authentication.xml b/docs/manual/src/docbook/digest-authentication.xml index 81e4b039e4..fa80d9df49 100644 --- a/docs/manual/src/docbook/digest-authentication.xml +++ b/docs/manual/src/docbook/digest-authentication.xml @@ -91,15 +91,15 @@ + - + diff --git a/docs/manual/src/docbook/form-authentication.xml b/docs/manual/src/docbook/form-authentication.xml index 8ec16b1747..99e5edcc97 100644 --- a/docs/manual/src/docbook/form-authentication.xml +++ b/docs/manual/src/docbook/form-authentication.xml @@ -1,15 +1,17 @@ -Form Authentication Mechanism - + + Form Authentication Mechanism
Overview - HTTP Form Authentication involves using the UsernamePasswordAuthenticationProcessingFilter to process a login form. This is the most common way for an application to authenticate end - users. Form-based authentication is entirely compatible with the DAO + users. Form-based authentication is entirely compatible with the DAO, LDAP and JAAS authentication providers. + This is also the mechanism used by the <form-login> element from the namespace + and it's recommended that you use that unless you have specific customization requirements. +
@@ -21,38 +23,47 @@ /j_spring_security_check). You should add an UsernamePasswordAuthenticationProcessingFilter to your application context: + - - ]]> - - The configured AuthenticationManager - processes each authentication request. If authentication fails, the - browser will be redirected to the - authenticationFailureUrl. The - AuthenticationException will be placed into the - HttpSession attribute indicated by - AbstractAuthenticationProcessingFilter.SPRING_SECURITY_LAST_EXCEPTION_KEY, - enabling a reason to be provided to the user on the error page. + + The configured AuthenticationManager + processes each authentication request. The destination following a successful authentication + or an authentication failure is controlled by the AuthenticationSuccessHandler + and AuthenticationFailureHandler interfaces, respectively. + The filter has properties which allow you to set these + In versions prior to 3.0, the application flow at this point had evolved to a stage + was controlled by a mix of properties on this class and strategy plugins. The + decision was made for 3.0 to refactor the code to make these two strategies entirely responsible. + . + Some standard implementations are supplied for these such as + SimpleUrlAuthenticationSuccessHandler, + SavedRequestAwareAuthenticationSuccessHandler, + SimpleUrlAuthenticationFailureHandler and + ExceptionMappingAuthenticationFailureHandler. Have a look at the Javadoc + for these classes to see how they work. + If authentication is successful, the resulting Authentication object will be placed into the - SecurityContextHolder. + SecurityContextHolder. + The configured AuthenticationSuccessHandler will then be called to either redirect or forward + the user to the approprate destination. By default a SavedRequestAwareAuthenticationSuccessHandler + is used, which means that the user will be redirected to the original destination they requested before they were asked to + login. + + + The ExceptionTranslationFilter caches the original request a user makes. + When the user authenticates, the request handler makes use of this cached request to obtain the original + URL and redirect to it. The original request is then rebuilt and used as an alternative. + + + If authentication fails, the configured AuthenticationFailureHandler will be invoked. + - Once the SecurityContextHolder has been - updated, the browser will need to be redirected to the target URL which - is usually indicated by the HttpSession attribute stored under - AbstractAuthenticationProcessingFilter.SPRING_SECURITY_TARGET_URL_KEY. - This attribute is automatically set by the - ExceptionTranslationFilter when an - AuthenticationException occurs, so that after login - is completed the user can return to what they were originally trying to access. - If for some reason the HttpSession does not - indicate the target URL, the browser will be redirected to the - defaultTargetUrl property. +
\ No newline at end of file diff --git a/docs/manual/src/resources/images/ACLSecurity.gif b/docs/manual/src/docbook/images/ACLSecurity.gif similarity index 100% rename from docs/manual/src/resources/images/ACLSecurity.gif rename to docs/manual/src/docbook/images/ACLSecurity.gif diff --git a/docs/manual/src/resources/images/AccessDecisionVoting.gif b/docs/manual/src/docbook/images/AccessDecisionVoting.gif similarity index 100% rename from docs/manual/src/resources/images/AccessDecisionVoting.gif rename to docs/manual/src/docbook/images/AccessDecisionVoting.gif diff --git a/docs/manual/src/resources/images/AfterInvocation.gif b/docs/manual/src/docbook/images/AfterInvocation.gif similarity index 100% rename from docs/manual/src/resources/images/AfterInvocation.gif rename to docs/manual/src/docbook/images/AfterInvocation.gif diff --git a/docs/manual/src/resources/images/Authentication.gif b/docs/manual/src/docbook/images/Authentication.gif similarity index 100% rename from docs/manual/src/resources/images/Authentication.gif rename to docs/manual/src/docbook/images/Authentication.gif diff --git a/docs/manual/src/resources/images/BasicAclProvider.gif b/docs/manual/src/docbook/images/BasicAclProvider.gif similarity index 100% rename from docs/manual/src/resources/images/BasicAclProvider.gif rename to docs/manual/src/docbook/images/BasicAclProvider.gif diff --git a/docs/manual/src/resources/images/Context.gif b/docs/manual/src/docbook/images/Context.gif similarity index 100% rename from docs/manual/src/resources/images/Context.gif rename to docs/manual/src/docbook/images/Context.gif diff --git a/docs/manual/src/resources/images/Permissions.gif b/docs/manual/src/docbook/images/Permissions.gif similarity index 100% rename from docs/manual/src/resources/images/Permissions.gif rename to docs/manual/src/docbook/images/Permissions.gif diff --git a/docs/manual/src/resources/images/SecurityInterception.gif b/docs/manual/src/docbook/images/SecurityInterception.gif similarity index 100% rename from docs/manual/src/resources/images/SecurityInterception.gif rename to docs/manual/src/docbook/images/SecurityInterception.gif diff --git a/docs/manual/src/resources/images/logo.gif b/docs/manual/src/docbook/images/logo.gif similarity index 100% rename from docs/manual/src/resources/images/logo.gif rename to docs/manual/src/docbook/images/logo.gif diff --git a/docs/manual/src/resources/images/s2-banner-rhs.png b/docs/manual/src/docbook/images/s2-banner-rhs.png similarity index 100% rename from docs/manual/src/resources/images/s2-banner-rhs.png rename to docs/manual/src/docbook/images/s2-banner-rhs.png diff --git a/docs/manual/src/resources/images/s2_box_logo.png b/docs/manual/src/docbook/images/s2_box_logo.png similarity index 100% rename from docs/manual/src/resources/images/s2_box_logo.png rename to docs/manual/src/docbook/images/s2_box_logo.png diff --git a/docs/manual/src/docbook/images/security-interception.graffle b/docs/manual/src/docbook/images/security-interception.graffle new file mode 100644 index 0000000000000000000000000000000000000000..0b8e62b92959ce9464005e77c2c78f722d2b9742 GIT binary patch literal 93236 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¨tUgybIa)=CoyVUxR^3Ox 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 literal 0 HcmV?d00001 diff --git a/docs/manual/src/docbook/images/security-interception.png b/docs/manual/src/docbook/images/security-interception.png new file mode 100644 index 0000000000000000000000000000000000000000..0f5ec2b2cb1810798b55ed2cf1d2a0766b7cb8ce GIT binary patch literal 69636 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 literal 0 HcmV?d00001 diff --git a/docs/manual/src/resources/images/xdev-spring_logo.jpg b/docs/manual/src/docbook/images/xdev-spring_logo.jpg similarity index 100% rename from docs/manual/src/resources/images/xdev-spring_logo.jpg rename to docs/manual/src/docbook/images/xdev-spring_logo.jpg diff --git a/docs/manual/src/docbook/introduction.xml b/docs/manual/src/docbook/introduction.xml index c13981fb1e..9032c6d5d7 100644 --- a/docs/manual/src/docbook/introduction.xml +++ b/docs/manual/src/docbook/introduction.xml @@ -1,308 +1,225 @@ - - - -Introduction - - - What is Spring Security? - - Spring Security provides comprehensive security services for - J2EE-based enterprise software applications. There is a particular - emphasis on supporting projects built using The Spring Framework, - which is the leading J2EE solution for enterprise software - development. If you're not using Spring for developing enterprise - applications, we warmly encourage you to take a closer look at it. - Some familiarity with Spring - and in particular dependency injection - principles - will help you get up to speed with Spring Security more - easily. - - People use Spring Security for many reasons, but most are drawn - to the project after finding the security features of J2EE's Servlet - Specification or EJB Specification lack the depth required for typical - enterprise application scenarios. Whilst mentioning these standards, - it's important to recognise that they are not portable at a WAR or EAR - level. Therefore, if you switch server environments, it is typically a - lot of work to reconfigure your application's security in the new - target environment. Using Spring Security overcomes these problems, - and also brings you dozens of other useful, entirely customisable - security features. - - As you probably know, security comprises two major operations. - The first is known as "authentication", which is the process of - establishing a principal is who they claim to be. A "principal" - generally means a user, device or some other system which can perform - an action in your application. "Authorization" refers to the process - of deciding whether a principal is allowed to perform an action in - your application. To arrive at the point where an authorization - decision is needed, the identity of the principal has already been - established by the authentication process. These concepts are common, - and not at all specific to Spring Security. - - At an authentication level, Spring Security supports a wide - range of authentication models. Most of these authentication models - are either provided by third parties, or are developed by relevant - standards bodies such as the Internet Engineering Task Force. In - addition, Spring Security provides its own set of authentication - features. Specifically, Spring Security currently supports - authentication integration with all of these technologies: - - - - HTTP BASIC authentication headers (an IEFT RFC-based - standard) - - - - HTTP Digest authentication headers (an IEFT RFC-based - standard) - - - - HTTP X.509 client certificate exchange (an IEFT RFC-based - standard) - - - - LDAP (a very common approach to cross-platform - authentication needs, especially in large environments) - - - - Form-based authentication (for simple user interface - needs) - - - - OpenID authentication - - - - Computer Associates Siteminder - - - - JA-SIG Central Authentication Service (otherwise known as - CAS, which is a popular open source single sign on system) - - - - Transparent authentication context propagation for Remote - Method Invocation (RMI) and HttpInvoker (a Spring remoting - protocol) - - - - Automatic "remember-me" authentication (so you can tick a - box to avoid re-authentication for a predetermined period of - time) - - - - Anonymous authentication (allowing every call to - automatically assume a particular security identity) - - - - Run-as authentication (which is useful if one call should - proceed with a different security identity) - - - - Java Authentication and Authorization Service (JAAS) - - - - Container integration with JBoss, Jetty, Resin and Tomcat - (so you can still use Container Manager Authentication if - desired) - - - - Java Open Source Single Sign On (JOSSO) * - - - - OpenNMS Network Management Platform * - - - - AppFuse * - - - - AndroMDA * - - - - Mule ESB * - - - - Direct Web Request (DWR) * - - - - Grails * - - - - Tapestry * - - - - JTrac * - - - - Jasypt * - - - - Roller * - - - - Elastic Plath * - - - - Atlassian Crowd * - - - - Your own authentication systems (see below) - - - - (* Denotes provided by a third party; check our integration page - for links to the latest details) - - Many independent software vendors (ISVs) adopt Spring Security - because of this significant choice of flexible authentication models. - Doing so allows them to quickly integrate their solutions with - whatever their end clients need, without undertaking a lot of - engineering or requiring the client to change their environment. If - none of the above authentication mechanisms suit your needs, Spring - Security is an open platform and it is quite simple to write your own - authentication mechanism. Many corporate users of Spring Security need - to integrate with "legacy" systems that don't follow any particular - security standards, and Spring Security is happy to "play nicely" with - such systems. - - Sometimes the mere process of authentication isn't enough. - Sometimes you need to also differentiate security based on the way a - principal is interacting with your application. For example, you might - want to ensure requests only arrive over HTTPS, in order to protect - passwords from eavesdropping or end users from man-in-the-middle - attacks. Or, you might want to ensure that an actual human being is - making the requests and not some robot or other automated process. - This is especially helpful to protect password recovery processes from - brute force attacks, or simply to make it harder for people to - duplicate your application's key content. To help you achieve these - goals, Spring Security fully supports automatic "channel security", - together with JCaptcha integration for human user detection. - - Irrespective of how authentication was undertaken, Spring - Security provides a deep set of authorization capabilities. There are - three main areas of interest in respect of authorization, these being - authorizing web requests, authorizing methods can be invoked, and - authorizing access to individual domain object instances. To help you - understand the differences, consider the authorization capabilities - found in the Servlet Specification web pattern security, EJB Container - Managed Security and file system security respectively. Spring - Security provides deep capabilities in all of these important areas, - which we'll explore later in this reference guide. - - - - History - - Spring Security began in late 2003 as "The Acegi Security System - for Spring". A question was posed on the Spring Developers' mailing - list asking whether there had been any consideration given to a - Spring-based security implementation. At the time the Spring community - was relatively small (especially by today's size!), and indeed Spring - itself had only existed as a SourceForge project from early 2003. The - response to the question was that it was a worthwhile area, although a - lack of time currently prevented its exploration. - - With that in mind, a simple security implementation was built - and not released. A few weeks later another member of the Spring - community inquired about security, and at the time this code was - offered to them. Several other requests followed, and by January 2004 - around twenty people were using the code. These pioneering users were - joined by others who suggested a SourceForge project was in order, - which was duly established in March 2004. - - In those early days, the project didn't have any of its own - authentication modules. Container Managed Security was relied upon for - the authentication process, with Acegi Security instead focusing on - authorization. This was suitable at first, but as more and more users - requested additional container support, the fundamental limitation of - container-specific authentication realm interfaces was experienced. - There was also a related issue of adding new JARs to the container's - classpath, which was a common source of end user confusion and - misconfiguration. - - Acegi Security-specific authentication services were - subsequently introduced. Around a year later, Acegi Security became an - official Spring Framework subproject. The 1.0.0 final release was - published in May 2006 - after more than two and a half years of active - use in numerous production software projects and many hundreds of - improvements and community contributions. - - Acegi Security became an official Spring Portfolio project - towards the end of 2007 and was rebranded as "Spring Security". - - Today Spring Security enjoys a strong and active open source - community. There are thousands of messages about Spring Security on - the support forums. There is an active core of developers work - who work on the code itself and an active community which also - regularly share patches and support their peers. - - - - Release Numbering - - It is useful to understand how Spring Security release numbers - work, as it will help you identify the effort (or lack thereof) - involved in migrating to future releases of the project. Officially, - we use the Apache Portable Runtime Project versioning guidelines, - which can be viewed at - http://apr.apache.org/versioning.html. We quote the - introduction contained on that page for your convenience: - - Versions are denoted using a standard triplet of - integers: MAJOR.MINOR.PATCH. The basic intent is that MAJOR versions - are incompatible, large-scale upgrades of the API. MINOR versions - retain source and binary compatibility with older minor versions, and - changes in the PATCH level are perfectly compatible, forwards and - backwards. - - - - Getting the Source - - Since Spring Security is an Open Source project, we'd strongly encourage you to - check out the source code using subversion. This will give you full access to all the sample - applications and you can build the most up to date version of the project easily. - Having the source for a project is also a huge help in debugging. Exception stack traces are no - longer obscure black-box issues but you can get straight to the line that's causing the problem - and work out what's happening. The source is the ultimate documentation for a project and often - the simplest place to find out how something actually works. - - - To obtain the source for the project trunk, use the following subversion command: - - svn checkout http://acegisecurity.svn.sourceforge.net/svnroot/acegisecurity/spring-security/trunk/ + Introduction + + What is Spring Security? + Spring Security provides comprehensive security services for J2EE-based enterprise + software applications. There is a particular emphasis on supporting projects built using + The Spring Framework, which is the leading J2EE solution for enterprise software + development. If you're not using Spring for developing enterprise applications, we + warmly encourage you to take a closer look at it. Some familiarity with Spring - and in + particular dependency injection principles - will help you get up to speed with Spring + Security more easily. + People use Spring Security for many reasons, but most are drawn to the project after + finding the security features of J2EE's Servlet Specification or EJB Specification lack + the depth required for typical enterprise application scenarios. Whilst mentioning these + standards, it's important to recognise that they are not portable at a WAR or EAR level. + Therefore, if you switch server environments, it is typically a lot of work to + reconfigure your application's security in the new target environment. Using Spring + Security overcomes these problems, and also brings you dozens of other useful, entirely + customisable security features. + As you probably know, security comprises two major operations. The first is known as + "authentication", which is the process of establishing a principal is who they claim to + be. A "principal" generally means a user, device or some other system which can perform + an action in your application. "Authorization" refers to the process of deciding whether + a principal is allowed to perform an action in your application. To arrive at the point + where an authorization decision is needed, the identity of the principal has already + been established by the authentication process. These concepts are common, and not at + all specific to Spring Security. + At an authentication level, Spring Security supports a wide range of authentication + models. Most of these authentication models are either provided by third parties, or are + developed by relevant standards bodies such as the Internet Engineering Task Force. In + addition, Spring Security provides its own set of authentication features. Specifically, + Spring Security currently supports authentication integration with all of these + technologies: + + + HTTP BASIC authentication headers (an IEFT RFC-based standard) + + + HTTP Digest authentication headers (an IEFT RFC-based standard) + + + HTTP X.509 client certificate exchange (an IEFT RFC-based standard) + + + LDAP (a very common approach to cross-platform authentication needs, + especially in large environments) + + + Form-based authentication (for simple user interface needs) + + + OpenID authentication + + + Computer Associates Siteminder + + + JA-SIG Central Authentication Service (otherwise known as CAS, which is a + popular open source single sign on system) + + + Transparent authentication context propagation for Remote Method Invocation + (RMI) and HttpInvoker (a Spring remoting protocol) + + + Automatic "remember-me" authentication (so you can tick a box to avoid + re-authentication for a predetermined period of time) + + + Anonymous authentication (allowing every call to automatically assume a + particular security identity) + + + Run-as authentication (which is useful if one call should proceed with a + different security identity) + + + Java Authentication and Authorization Service (JAAS) + + + Container integration with JBoss, Jetty, Resin and Tomcat (so you can still + use Container Manager Authentication if desired) + + + Java Open Source Single Sign On (JOSSO) * + + + OpenNMS Network Management Platform * + + + AppFuse * + + + AndroMDA * + + + Mule ESB * + + + Direct Web Request (DWR) * + + + Grails * + + + Tapestry * + + + JTrac * + + + Jasypt * + + + Roller * + + + Elastic Path * + + + Atlassian Crowd * + + + Your own authentication systems (see below) + + + (* Denotes provided by a third party; check our integration page for + links to the latest details) + Many independent software vendors (ISVs) adopt Spring Security because of this + significant choice of flexible authentication models. Doing so allows them to quickly + integrate their solutions with whatever their end clients need, without undertaking a + lot of engineering or requiring the client to change their environment. If none of the + above authentication mechanisms suit your needs, Spring Security is an open platform and + it is quite simple to write your own authentication mechanism. Many corporate users of + Spring Security need to integrate with "legacy" systems that don't follow any particular + security standards, and Spring Security is happy to "play nicely" with such + systems. + Sometimes the mere process of authentication isn't enough. Sometimes you need to also + differentiate security based on the way a principal is interacting with your + application. For example, you might want to ensure requests only arrive over HTTPS, in + order to protect passwords from eavesdropping or end users from man-in-the-middle + attacks. Or, you might want to ensure that an actual human being is making the requests + and not some robot or other automated process. This is especially helpful to protect + password recovery processes from brute force attacks, or simply to make it harder for + people to duplicate your application's key content. To help you achieve these goals, + Spring Security fully supports automatic "channel security", together with JCaptcha + integration for human user detection. + Irrespective of how authentication was undertaken, Spring Security provides a deep set + of authorization capabilities. There are three main areas of interest in respect of + authorization, these being authorizing web requests, authorizing methods can be invoked, + and authorizing access to individual domain object instances. To help you understand the + differences, consider the authorization capabilities found in the Servlet Specification + web pattern security, EJB Container Managed Security and file system security + respectively. Spring Security provides deep capabilities in all of these important + areas, which we'll explore later in this reference guide. + + + History + Spring Security began in late 2003 as "The Acegi Security System for Spring". A + question was posed on the Spring Developers' mailing list asking whether there had been + any consideration given to a Spring-based security implementation. At the time the + Spring community was relatively small (especially by today's size!), and indeed Spring + itself had only existed as a SourceForge project from early 2003. The response to the + question was that it was a worthwhile area, although a lack of time currently prevented + its exploration. + With that in mind, a simple security implementation was built and not released. A few + weeks later another member of the Spring community inquired about security, and at the + time this code was offered to them. Several other requests followed, and by January 2004 + around twenty people were using the code. These pioneering users were joined by others + who suggested a SourceForge project was in order, which was duly established in March + 2004. + In those early days, the project didn't have any of its own authentication modules. + Container Managed Security was relied upon for the authentication process, with Acegi + Security instead focusing on authorization. This was suitable at first, but as more and + more users requested additional container support, the fundamental limitation of + container-specific authentication realm interfaces was experienced. There was also a + related issue of adding new JARs to the container's classpath, which was a common source + of end user confusion and misconfiguration. + Acegi Security-specific authentication services were subsequently introduced. Around a + year later, Acegi Security became an official Spring Framework subproject. The 1.0.0 + final release was published in May 2006 - after more than two and a half years of active + use in numerous production software projects and many hundreds of improvements and + community contributions. + Acegi Security became an official Spring Portfolio project towards the end of 2007 and + was rebranded as "Spring Security". + Today Spring Security enjoys a strong and active open source community. There are + thousands of messages about Spring Security on the support forums. There is an active + core of developers work who work on the code itself and an active community which also + regularly share patches and support their peers. + + + Release Numbering + It is useful to understand how Spring Security release numbers work, as it will help + you identify the effort (or lack thereof) involved in migrating to future releases of + the project. Officially, we use the Apache Portable Runtime Project versioning + guidelines, which can be viewed at + http://apr.apache.org/versioning.html. We quote the introduction + contained on that page for your convenience: + Versions are denoted using a standard triplet of integers: MAJOR.MINOR.PATCH. + The basic intent is that MAJOR versions are incompatible, large-scale upgrades of + the API. MINOR versions retain source and binary compatibility with older minor + versions, and changes in the PATCH level are perfectly compatible, forwards and + backwards. + + + Getting the Source + Since Spring Security is an Open Source project, we'd strongly encourage you to check + out the source code using subversion. This will give you full access to all the sample + applications and you can build the most up to date version of the project easily. Having + the source for a project is also a huge help in debugging. Exception stack traces are no + longer obscure black-box issues but you can get straight to the line that's causing the + problem and work out what's happening. The source is the ultimate documentation for a + project and often the simplest place to find out how something actually works. + To obtain the source for the project trunk, use the following subversion command: + + svn checkout https://src.springframework.org/svn/spring-security/trunk/ - You can checkout specific versions from http://acegisecurity.svn.sourceforge.net/svnroot/acegisecurity/spring-security/tags/. - - - - - \ No newline at end of file + You can checkout specific versions from + https://src.springframework.org/svn/spring-security/tags/. +
+ + diff --git a/docs/manual/src/docbook/jaas-auth-provider.xml b/docs/manual/src/docbook/jaas-auth-provider.xml index 11062bda95..cd2a322dd1 100644 --- a/docs/manual/src/docbook/jaas-auth-provider.xml +++ b/docs/manual/src/docbook/jaas-auth-provider.xml @@ -32,14 +32,16 @@ JAASTest { above JAAS login configuration file: - - - - - - - + class="org.springframework.security.authentication.jaas.JaasAuthenticationProvider"> + + + + + + + diff --git a/docs/manual/src/docbook/ldap-auth-provider.xml b/docs/manual/src/docbook/ldap-auth-provider.xml index 60a1dad34d..62f5479edb 100644 --- a/docs/manual/src/docbook/ldap-auth-provider.xml +++ b/docs/manual/src/docbook/ldap-auth-provider.xml @@ -69,8 +69,8 @@ url attribute: - ]]> + +]]>
@@ -85,8 +85,8 @@ url attribute: - ]]> + + ]]> Here we've specified that the root DIT of the directory should be dc=springframework,dc=org, which is the default. Used this way, the @@ -96,7 +96,7 @@ ldif attribute, which defines an LDIF resource to be loaded: + ]]> This makes it a lot easier to get up and running with LDAP, since it can be inconvenient to work all the time with an external server. It also insulates the @@ -113,7 +113,7 @@ This is the most common LDAP authentication scenario. + ]]> This simple example would obtain the DN for the user by substituting the user login name in the supplied pattern and attempting to bind as that user with the login @@ -121,7 +121,8 @@ directory. If instead you wished to configure an LDAP search filter to locate the user, you could use the following: + ]]> If used with the server definition above, this would perform a search under the DN ou=people,dc=springframework,dc=org @@ -167,7 +168,8 @@ So if we used the following configuration + ]]> and authenticated successfully as user ben, the subsequent loading of authorities would perform a search @@ -195,9 +197,8 @@ using namespace configuration then you can skip this section and the next one. - The main LDAP provider class is - org.springframework.security.ldap.authentication.LdapAuthenticationProvider. - This bean doesn't actually do much itself but delegates the work to two other beans, an + The main LDAP provider class, LdapAuthenticationProvider, + doesn't actually do much itself but delegates the work to two other beans, an LdapAuthenticator and an LdapAuthoritiesPopulator @@ -260,8 +261,8 @@ BindAuthenticator - The class - org.springframework.security.ldap.authentication.BindAuthenticator + The class BindAuthenticator in the package + org.springframework.security.ldap.authentication implements the bind authentication strategy. It simply attempts to bind as the user.
@@ -269,8 +270,7 @@ PasswordComparisonAuthenticator - The class - org.springframework.security.ldap.authentication.PasswordComparisonAuthenticator + The class PasswordComparisonAuthenticator implements the password comparison authentication strategy.
@@ -350,22 +350,23 @@ - - - - - uid={0},ou=people - - - - - - - - - - + class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider"> + + + + + uid={0},ou=people + + + + + + + + + + ]]> This would set up the provider to access an LDAP server with URL @@ -410,9 +411,10 @@ to and from LDAP context data: Only the first method is relevant for authentication. If you provide an implementation of this interface, you can diff --git a/docs/manual/src/docbook/namespace-config.xml b/docs/manual/src/docbook/namespace-config.xml index 316af575f2..19e6ebce6e 100644 --- a/docs/manual/src/docbook/namespace-config.xml +++ b/docs/manual/src/docbook/namespace-config.xml @@ -34,8 +34,10 @@ + xsi:schemaLocation="http://www.springframework.org/schema/beans + http://www.springframework.org/schema/beans/spring-beans-3.0.xsd + http://www.springframework.org/schema/security + http://www.springframework.org/schema/security/spring-security-3.0.xsd"> ... ]]> In many of the examples you will see (and in the sample) applications, we @@ -47,8 +49,10 @@ + xsi:schemaLocation="http://www.springframework.org/schema/beans + http://www.springframework.org/schema/beans/spring-beans-3.0.xsd + http://www.springframework.org/schema/security + http://www.springframework.org/schema/security/spring-security-3.0.xsd"> ... ]]> We'll assume this syntax is being used from now on in this chapter. @@ -109,8 +113,7 @@
<literal>web.xml</literal> Configuration The first thing you need to do is add the following filter declaration to your - web.xml file: - web.xml file: springSecurityFilterChain org.springframework.web.filter.DelegatingFilterProxy @@ -245,7 +248,8 @@ - + ]]> @@ -276,7 +280,8 @@ user-service-ref attribute: - + ]]> @@ -292,8 +297,10 @@ - - + + ]]> @@ -304,9 +311,9 @@ UserDetails object which is loaded by your UserDetailsService. For example, to use the username property, you would use - - + + + ]]> You can use a custom password encoder bean by using the ref attribute of password-encoder. This should contain the name of a bean in the application context which is an instance of Spring @@ -336,8 +343,7 @@ to an HTTPS URL. The available options are "http", "https" or "any". Using the value "any" means that either HTTP or HTTPS can be used. If your application uses non-standard ports for HTTP and/or HTTPS, you can specify a - list of port mappings as follows: - ... @@ -354,9 +360,11 @@ additions. First you need to add the following listener to your web.xml file to keep Spring Security updated about session lifecycle events: - org.springframework.security.web.session.HttpSessionEventPublisher - + + + org.springframework.security.web.session.HttpSessionEventPublisher + + ]]> Then add the following line to your application context: ... @@ -384,7 +392,8 @@ ]]> You should then register yourself with an OpenID provider (such as myopenid.com), and add the user information to your in-memory <user-service>: + ]]> You should be able to login using the myopenid.com site to authenticate.
@@ -566,9 +575,9 @@
Method Security - Spring Security 2.0 has improved support substantially for adding security to your - service layer methods. If you are using Java 5 or greater, then support for JSR-250 security - annotations is provided, as well as the framework's native @Secured + From version 2.0 onwards Spring Security has improved support substantially for adding security to your + service layer methods. It provides support for JSR-250 security + as well as the framework's native @Secured annotation. You can apply security to a single bean, using the intercept-methods element to decorate the bean declaration, or you can secure multiple beans across the entire service layer using the AspectJ style pointcuts. @@ -607,7 +616,8 @@ you to apply security to many beans with only a simple declaration. Consider the following example: - + ]]> This will protect all methods on beans declared in the application @@ -691,7 +701,8 @@ you can then use this name elsewhere in your application context. - + ... diff --git a/docs/manual/src/docbook/preauth.xml b/docs/manual/src/docbook/preauth.xml index b795edb809..995a65997d 100644 --- a/docs/manual/src/docbook/preauth.xml +++ b/docs/manual/src/docbook/preauth.xml @@ -150,19 +150,19 @@ A typical configuration using this filter would look like this: + +class="org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider"> + class="org.springframework.security.userdetails.UserDetailsByNameServiceWrapper"> diff --git a/docs/manual/src/docbook/remember-me-authentication.xml b/docs/manual/src/docbook/remember-me-authentication.xml index 9dc62800c9..433054be43 100644 --- a/docs/manual/src/docbook/remember-me-authentication.xml +++ b/docs/manual/src/docbook/remember-me-authentication.xml @@ -29,14 +29,15 @@ In essence a cookie is sent to the browser upon successful interactive authentication, with the cookie being composed as follows: - base64(username + ":" + expirationTime + ":" + md5Hex(username + ":" + expirationTime + ":" password + ":" + key)) + base64(username + ":" + expirationTime + ":" + + md5Hex(username + ":" + expirationTime + ":" password + ":" + key)) - username: As identifiable to the UserDetailsService - password: That matches the one in the retrieved UserDetails - expirationTime: The date and time when the remember-me token expires, expressed in milliseconds - key: A private key to prevent modification of the remember-me token + username: As identifiable to the UserDetailsService + password: That matches the one in the retrieved UserDetails + expirationTime: The date and time when the remember-me token expires, + expressed in milliseconds + key: A private key to prevent modification of the remember-me token - As such the remember-me token is valid only for the period specified, and provided that the username, password and key does not change. Notably, this has a potential security issue in that a @@ -97,10 +98,11 @@ superclass. The hooks will invoke a concrete RememberMeServices at the appropriate times. The interface looks like this: - + Authentication autoLogin(HttpServletRequest request, HttpServletResponse response); void loginFail(HttpServletRequest request, HttpServletResponse response); - void loginSuccess(HttpServletRequest request, HttpServletResponse response, Authentication successfulAuthentication); + void loginSuccess(HttpServletRequest request, HttpServletResponse response, + Authentication successfulAuthentication); Please refer to the JavaDocs for a fuller discussion on what the methods do, although note at this stage that @@ -137,20 +139,21 @@ to have the cookie cleared automatically. The beans required in an application context to enable remember-me services are as follows: - + - + - + ]]> diff --git a/docs/manual/src/docbook/runas-auth-provider.xml b/docs/manual/src/docbook/runas-auth-provider.xml index a5148d0c0b..a66414084c 100644 --- a/docs/manual/src/docbook/runas-auth-provider.xml +++ b/docs/manual/src/docbook/runas-auth-provider.xml @@ -32,7 +32,8 @@ Configuration A RunAsManager interface is provided by Spring Security: - Authentication buildRunAs(Authentication authentication, Object object, List<ConfigAttribute> config); + Authentication buildRunAs(Authentication authentication, Object object, + List<ConfigAttribute> config); boolean supports(ConfigAttribute attribute); boolean supports(Class clazz); @@ -87,7 +88,8 @@ bean context with the same key: + diff --git a/docs/manual/src/docbook/secured-objects.xml b/docs/manual/src/docbook/secured-objects.xml index 453a96d178..7561af023b 100644 --- a/docs/manual/src/docbook/secured-objects.xml +++ b/docs/manual/src/docbook/secured-objects.xml @@ -76,7 +76,7 @@ + class="org.springframework.security.intercept.aspectj.AspectJSecurityInterceptor"> @@ -115,7 +115,7 @@ public aspect DomainObjectInstanceSecurityAspect implements InitializingBean { private AspectJSecurityInterceptor securityInterceptor; pointcut domainObjectInstanceExecution(): target(PersistableEntity) - && execution(public * *(..)) && !within(DomainObjectInstanceSecurityAspect); + && execution(public * *(..)) && !within(DomainObjectInstanceSecurityAspect); Object around(): domainObjectInstanceExecution() { if (this.securityInterceptor == null) { @@ -162,8 +162,8 @@ public void afterPropertiesSet() throws Exception { + class="org.springframework.security.samples.aspectj.DomainObjectInstanceSecurityAspect" + factory-method="aspectOf"> ]]> @@ -187,12 +187,12 @@ public void afterPropertiesSet() throws Exception { + class="org.springframework.security.web.access.ExceptionTranslationFilter"> + class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint"> @@ -291,7 +291,7 @@ public void afterPropertiesSet() throws Exception { + class="org.springframework.security.intercept.web.FilterSecurityInterceptor"> diff --git a/docs/manual/src/docbook/springsecurity.xml b/docs/manual/src/docbook/springsecurity.xml index 53a8cf9449..1769affb7d 100644 --- a/docs/manual/src/docbook/springsecurity.xml +++ b/docs/manual/src/docbook/springsecurity.xml @@ -1,9 +1,15 @@ - Spring SecurityReference Documentation - Ben Alex, Luke Taylor - + Spring SecurityReference Documentation + + Ben Alex + + + Luke Taylor + + + Spring Security 3.0.0.M1 @@ -82,11 +88,13 @@ Overall Architecture - Like most software, Spring Security has certain central interfaces, classes and - conceptual abstractions that are commonly used throughout the framework. In this part of the - reference guide we will introduce Spring Security, before examining these central elements - that are necessary to successfully planning and executing a Spring Security - integration. + Once you are familiar with setting up and running some namespace-configuration based + applications, you may wish to develop more of an understanding of how the framework actually + works behind the namespace facade. Like most software, Spring Security has certain central + interfaces, classes and conceptual abstractions that are commonly used throughout the + framework. In this part of the reference guide we will look at some of these and see how + they work together to support authentication and access-control within Spring + Security. diff --git a/docs/manual/src/docbook/supporting-infrastructure.xml b/docs/manual/src/docbook/supporting-infrastructure.xml index 556424127d..8f640ef224 100644 --- a/docs/manual/src/docbook/supporting-infrastructure.xml +++ b/docs/manual/src/docbook/supporting-infrastructure.xml @@ -38,7 +38,8 @@ is shown below: + ]]> @@ -91,16 +92,16 @@ When using DelegatingFilterProxy, you will see something like this in the web.xml file: - - <filter> - <filter-name>myFilter</filter-name> - <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> - </filter> + + myFilter + org.springframework.web.filter.DelegatingFilterProxy + - <filter-mapping> - <filter-name>myFilter</filter-name> - <url-pattern>/*</url-pattern> - </filter-mapping> + + myFilter + /* + ]]> Notice that the filter is actually a DelegatingFilterProxy, @@ -152,10 +153,16 @@ - - + + ]]> @@ -335,8 +342,7 @@ in your JSP: <%@ taglib prefix='security' uri='http://www.springframework.org/security/tags' %> - - +
\ No newline at end of file diff --git a/docs/manual/src/docbook/technical-overview.xml b/docs/manual/src/docbook/technical-overview.xml index bbdd072275..af3a18e20e 100644 --- a/docs/manual/src/docbook/technical-overview.xml +++ b/docs/manual/src/docbook/technical-overview.xml @@ -2,586 +2,582 @@ Technical Overview -
Runtime Environment - - Spring Security 3.0 requires a Java 5.0 Runtime Environment or higher. - As Spring Security aims to operate in a self-contained manner, there is no need - to place any special configuration files into your Java Runtime - Environment. In particular, there is no need to configure a special - Java Authentication and Authorization Service (JAAS) policy file or - place Spring Security into common classpath locations. - - Similarly, if you are using an EJB Container or Servlet - Container there is no need to put any special configuration files - anywhere, nor include Spring Security in a server classloader. All the required - files will be contained within your application. - - This design offers maximum deployment time flexibility, as - you can simply copy your target artifact (be it a JAR, WAR or EAR) - from one system to another and it will immediately work. + Spring Security 3.0 requires a Java 5.0 Runtime Environment or higher. As Spring Security + aims to operate in a self-contained manner, there is no need to place any special + configuration files into your Java Runtime Environment. In particular, there is no need to + configure a special Java Authentication and Authorization Service (JAAS) policy file or place + Spring Security into common classpath locations. + Similarly, if you are using an EJB Container or Servlet Container there is no need to put + any special configuration files anywhere, nor include Spring Security in a server classloader. + All the required files will be contained within your application. + This design offers maximum deployment time flexibility, as you can simply copy your target + artifact (be it a JAR, WAR or EAR) from one system to another and it will immediately + work.
- -
+
- Shared Components + Core Components - - Let's explore some of the most important shared components in - Spring Security. Components are considered "shared" if they are - central to the framework and the framework cannot operate without - them. These Java types represent the building blocks of the remaining - system, so it's important to understand that they're there, even if - you don't need to directly interact with them. - - + In Spring Security 3.0, the contents of the spring-security-core jar + were stripped down to the bare minimum. It no longer contains any code related to + web-application security, LDAP or namespace configuration. We'll take a look here at some of + the Java types that you'll find in the core module. They represent the building blocks of the + the framework, so if you ever need to go beyond a simple namespace configuration then it's + important that you understand what they are, even if you don't actually need to directly + interact with them.
- - SecurityContextHolder, SecurityContext and Authentication Objects - - The most fundamental object is - SecurityContextHolder. This is where we store - details of the present security context of the application, which - includes details of the principal currently using the application. By - default the SecurityContextHolder uses a - ThreadLocal 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 to those methods. Using a - ThreadLocal in this way is quite safe if care is - taken to clear the thread after the present principal's request is - processed. Of course, Spring Security takes care of this for you - automatically so there is no need to worry about it. + SecurityContextHolder, SecurityContext and Authentication Objects + The most fundamental object is SecurityContextHolder. This is + where we store details of the present security context of the application, which includes + details of the principal currently using the application. By default the + SecurityContextHolder uses a ThreadLocal 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 to those methods. Using a ThreadLocal in this way is quite + safe if care is taken to clear the thread after the present principal's request is + processed. Of course, Spring Security takes care of this for you automatically so there is + no need to worry about it. + Some applications aren't entirely suitable for using a ThreadLocal, + because of the specific way they work with threads. For example, a Swing client might want + all threads in a Java Virtual Machine to use the same security context. For this situation + you would use the SecurityContextHolder.MODE_GLOBAL. Other applications + might want to have threads spawned by the secure thread also assume the same security + identity. This is achieved by using + SecurityContextHolder.MODE_INHERITABLETHREADLOCAL. You can change the + mode from the default SecurityContextHolder.MODE_THREADLOCAL in two ways. + The first is to set a system property. Alternatively, call a static method on + SecurityContextHolder. Most applications won't need to change from + the default, but if you do, take a look at the JavaDocs for + SecurityContextHolder to learn more. +
+ Obtaining information about the current user + Inside the SecurityContextHolder we store details of the + principal currently interacting with the application. Spring Security uses an + Authentication object to represent this information. You + won't normally need to create an Authentication object + yourself, but it is fairly common for users to query the + Authentication object. You can use the following code + block - from anywhere in your application - to obtain the name of the currently + authenticated user, for example: + +Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); - Some applications aren't entirely suitable for using a - ThreadLocal, because of the specific way they work - with threads. For example, a Swing client might want all threads in a - Java Virtual Machine to use the same security context. For this - situation you would use the - SecurityContextHolder.MODE_GLOBAL. Other - applications might want to have threads spawned by the secure thread - also assume the same security identity. This is achieved by using - SecurityContextHolder.MODE_INHERITABLETHREADLOCAL. - You can change the mode from the default - SecurityContextHolder.MODE_THREADLOCAL in two ways. - The first is to set a system property. Alternatively, call a static - method on SecurityContextHolder. Most applications - won't need to change from the default, but if you do, take a look at - the JavaDocs for SecurityContextHolder to learn - more. - - Inside the SecurityContextHolder we store - details of the principal currently interacting with the application. - Spring Security uses an Authentication object to - represent this information. Whilst you won't normally need to create - an Authentication object yourself, it is fairly - common for users to query the Authentication - object. You can use the following code block - from anywhere in your - application - to obtain the name of the authenticated user, for example: - - -Object obj = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); - -if (obj instanceof UserDetails) { - String username = ((UserDetails)obj).getUsername(); +if (principal instanceof UserDetails) { + String username = ((UserDetails)principal).getUsername(); } else { - String username = obj.toString(); + String username = principal.toString(); } - - The above code introduces a number of interesting relationships - and key objects. First, you will notice that there is an intermediate - object between SecurityContextHolder and - Authentication. The - SecurityContextHolder.getContext() method is - actually returning a SecurityContext. - - - + The object returned by the call to getContext() is an + instance of the SecurityContext interface. This is the + object that is kept in thread-local storage. Most authentication mechanisms withing Spring + Security return an instance of UserDetails as the principal + as we'll see below. +
-
The UserDetailsService - - Another item to note from the above code fragment is that you - can obtain a principal from the Authentication - object. The principal is just an Object. Most of - the time this can be cast into a UserDetails - object. UserDetails is a central interface in - Spring Security. It represents a principal, but in an extensible and - application-specific way. Think of UserDetails as - the adapter between your own user database and what Spring Security - needs inside the SecurityContextHolder. Being a - representation of something from your own user database, quite often - you will cast the UserDetails to the original - object that your application provided, so you can call - business-specific methods (like getEmail(), - getEmployeeNumber() and so on). - - By now you're probably wondering, so when do I provide a - UserDetails object? How do I do that? I thought you - said this thing was declarative and I didn't need to write any Java - code - what gives? The short answer is that there is a special - interface called UserDetailsService. The only - method on this interface accepts a String-based - username argument and returns a UserDetails. Most - authentication providers that ship with Spring Security delegate to a - UserDetailsService as part of the authentication - process. The UserDetailsService is used to build - the Authentication object that is stored in the - SecurityContextHolder. The good news is that we - provide a number of UserDetailsService - implementations, including one that uses an in-memory map and another - 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 - whatever your UserDetailsService returns can always be obtained from - the SecurityContextHolder, as per the above code - fragment. + Another item to note from the above code fragment is that you can obtain a principal + from the Authentication object. The principal is just an + Object. Most of the time this can be cast into a + UserDetails object. + UserDetails is a central interface in Spring Security. It + represents a principal, but in an extensible and application-specific way. Think of + UserDetails as the adapter between your own user database + and what Spring Security needs inside the SecurityContextHolder. + Being a representation of something from your own user database, quite often you will cast + the UserDetails to the original object that your application + provided, so you can call business-specific methods (like getEmail(), + getEmployeeNumber() and so on). + By now you're probably wondering, so when do I provide a + UserDetails object? How do I do that? I thought you said + this thing was declarative and I didn't need to write any Java code - what gives? The short + answer is that there is a special interface called + UserDetailsService. The only method on this interface + accepts a String-based username argument and returns a + UserDetails. Most authentication providers that ship with + Spring Security delegate to a UserDetailsService as part of + the authentication process. The UserDetailsService is used to + build the Authentication object that is stored in the + SecurityContextHolder. The good news is that we provide a number of + UserDetailsService implementations, including one that uses + an in-memory map and another that uses JDBC. Most users tend to write their own, though, + with their 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 whatever your UserDetailsService returns can always + be obtained from the SecurityContextHolder, as per the above code + fragment.
- -
GrantedAuthority - - Besides the principal, another important method provided by - Authentication is - getAuthorities(). This method provides an array of - GrantedAuthority objects. A - GrantedAuthority is, not surprisingly, an authority - that is granted to the principal. Such authorities are usually - "roles", such as ROLE_ADMINISTRATOR or - ROLE_HR_SUPERVISOR. These roles are later on - configured for web authorization, method authorization and domain - object authorization. Other parts of Spring Security are capable of - interpreting these authorities, and expect them to be present. - GrantedAuthority objects are usually loaded by the - UserDetailsService. - - Usually the GrantedAuthority objects are - application-wide permissions. They are not specific to a given domain - object. Thus, you wouldn't likely have a - GrantedAuthority to represent a permission to - Employee object number 54, because if there are - thousands of such authorities you would quickly run out of memory (or, - at the very least, cause the application to take a long time to - authenticate a user). Of course, Spring Security is expressly designed - to handle this common requirement, but you'd instead use the project's - domain object security capabilities for this purpose. + Besides the principal, another important method provided by + Authentication is getAuthorities(). This + method provides an array of GrantedAuthority objects. A + GrantedAuthority is, not surprisingly, an authority that is + granted to the principal. Such authorities are usually "roles", such as + ROLE_ADMINISTRATOR or ROLE_HR_SUPERVISOR. These + roles are later on configured for web authorization, method authorization and domain object + authorization. Other parts of Spring Security are capable of interpreting these authorities, + and expect them to be present. GrantedAuthority objects are + usually loaded by the UserDetailsService. + Usually the GrantedAuthority objects are application-wide + permissions. They are not specific to a given domain object. Thus, you wouldn't likely have + a GrantedAuthority to represent a permission to + Employee object number 54, because if there are thousands of such + authorities you would quickly run out of memory (or, at the very least, cause the + application to take a long time to authenticate a user). Of course, Spring Security is + expressly designed to handle this common requirement, but you'd instead use the project's + domain object security capabilities for this purpose.
- -
- Storing the <interfacename>SecurityContext</interfacename> - Last but not least, depending on the type of application, there may need to be - a strategy in place to store the security context between user operations. - In a typical web application, for example, a user logs in once and is subsequently identified - by their session Id. The server caches the principal information for the duration session. - In Spring Security, the responsibility for storing the SecurityContext - between requests falls to the SecurityContextPersistenceFilter, which - by default stores the context as an HttpSession attribute between HTTP - requests. It restores the context to the SecurityContextHolder for each request - and, crucially, clears the SecurityContextHolder when the request completes. - You should never interact directly with the HttpSession for security purposes. - There is simply no justification for doing so - always use the SecurityContextHolder - instead. - - - Many other types of application (for example, a stateless RESTful web service) do not use HTTP sessions and - will re-authenticate on every request. However, it is still important that the - SecurityContextPersistenceFilter is included in the - chain to make sure that the SecurityContextHolder is cleared after each request, - even if - -
-
Summary - Just to recap, the major building blocks of Spring Security - are: + Just to recap, the major building blocks of Spring Security that we've seen so far + are: + + + SecurityContextHolder, to provide access to the + SecurityContext. + + + SecurityContext, to hold the + Authentication and possibly request-specific security + information. + + + Authentication, to represent the principal in a + Spring Security-specific manner. + + + GrantedAuthority, to reflect the application-wide + permissions granted to a principal. + + + UserDetails, to provide the necessary information to + build an Authentication object from your application's DAOs or other source source of + security data. + + + UserDetailsService, to create a + UserDetails when passed in a + String-based username (or certificate ID or the like). + + + Now that you've gained an understanding of these repeatedly-used components, let's take + a closer look at the process of authentication. +
+
+
+ + Authentication + + Spring Security can participate in many different authentication environments. While we + recommend people use Spring Security for authentication and not integrate with existing + Container Managed Authentication, it is nevertheless supported - as is integrating with your + own proprietary authentication system. +
+ What is authentication in Spring Security? + Let's consider a standard authentication scenario that everyone is familiar with. + + A user is prompted to log in with a username and password. + + + The system (successfully) verifies that the password is correct for the + username. + + + The context information for that user is obtained (their list of roles and so + on). + + + A security context is established for the user + + + The user proceeds, potentially to perform some operation which is potentially + protected by an access control mechanism which checks the required permissions for the + operation against the current security context information. + + The first three items constitute the authentication process so we'll take a + look at how these take place within Spring Security. + + The username and password are obtained and combined into an instance of + UsernamePasswordAuthenticationToken (an instance of the + Authentication interface, which we saw + earlier). + + + The token is passed to an instance of + AuthenticationManager for validation. + + + The AuthenticationManager returns a fully populated + Authentication instance on successful + authentication. + + + The security context is established by calling + SecurityContextHolder.getContext().setAuthentication(...), passing in + the returned authentication object. + + From that point on, the user is considered to be authenticated. Let's look at + some code as an + example.import org.springframework.security.authentication.*; +import org.springframework.security.core.*; +import org.springframework.security.core.authority.GrantedAuthorityImpl; +import org.springframework.security.core.context.SecurityContextHolder; - - - SecurityContextHolder, to provide any - type access to the SecurityContext. - +public class AuthenticationExample { + private static AuthenticationManager am = new SampleAuthenticationManager(); - - SecurityContext, to hold the - Authentication and possibly request-specific - security information. - + public static void main(String[] args) throws Exception { + BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); - - SecurityContextPersistenceFilter, to - store the SecurityContext (typically in the - HttpSession) between web requests. - + while(true) { + System.out.println("Please enter your username:"); + String name = in.readLine(); + System.out.println("Please enter your password:"); + String password = in.readLine(); + try { + Authentication request = new UsernamePasswordAuthenticationToken(name, password); + Authentication result = am.authenticate(request); + SecurityContextHolder.getContext().setAuthentication(result); + break; + } catch(AuthenticationException e) { + System.out.println("Authentication failed: " + e.getMessage()); + } + } + System.out.println("Successfully authenticated. Security context contains: " + + SecurityContextHolder.getContext().getAuthentication()); + } +} - - Authentication, to represent the - principal in a Spring Security-specific manner. - +class SampleAuthenticationManager implements AuthenticationManager { + static final List<GrantedAuthority> AUTHORITIES = new ArrayList<GrantedAuthority>(); - - GrantedAuthority, to reflect the - application-wide permissions granted to a principal. - + static { + AUTHORITIES.add(new GrantedAuthorityImpl("ROLE_USER")); + } - - UserDetails, to provide the necessary - information to build an Authentication object from your - application's DAOs. - - - - UserDetailsService, to create a - UserDetails when passed in a - String-based username (or certificate ID or - alike). - - - - Now that you've gained an understanding of these repeatedly-used - components, let's take a closer look at the process of - authentication. + public Authentication authenticate(Authentication auth) throws AuthenticationException { + if (auth.getName().equals(auth.getCredentials())) { + return new UsernamePasswordAuthenticationToken(auth.getName(), + auth.getCredentials(), AUTHORITIES); + } + throw new BadCredentialsException("Bad Credentials"); + } +}Here + we have written a little program that asks the user to enter a username and password + and performs the above sequence. The AuthenticationManager which + we've implemented here will authenticate any user whose username and password are the same. + It assigns a single role to every user. The output from the above will be something + like: +Please enter your username: +bob +Please enter your password: +password +Authentication failed: Bad Credentials +Please enter your username: +bob +Please enter your password: +bob +Successfully authenticated. Security context contains: \ + org.springframework.security.authentication.UsernamePasswordAuthenticationToken@441d0230: \ + Principal: bob; Password: [PROTECTED]; \ + Authenticated: true; Details: null; \ + Granted Authorities: ROLE_USER + + Note that you don't normally need to write any code like this. The process will normally + occur internally, in a web authentication filter for example. We've just included the code + here to show that the question of what actually constitutes authentication in Spring Security + has quite a simple answer. A user is authenticated when the + SecurityContextHolder contains a fully populated + Authentiation object. +
+ Setting the SecurityContextHolder Contents Directly + In fact, Spring Security doesn't mind how you put the + Authentication object inside the + SecurityContextHolder. The only critical requirement is that the + SecurityContextHolder contains an + Authentication that represents a principal before the + AbstractSecurityInterceptor (which we'll see more about later) + needs to authorize a user operation. + You can (and many users do) write their own filters or MVC controllers to provide + interoperability with authentication systems that are not based on Spring Security. For + example, you might be using Container-Managed Authentication which makes the current user + available from a ThreadLocal or JNDI location. Or you might work for a company that has a + legacy proprietary authentication system, which is a corporate "standard" over which you + have little control. In situations like this it's quite easy to get Spring Security to + work, and still provide authorization capabilities. All you need to do is write a filter + (or equivalent) that reads the third-party user information from a location, build a + Spring Security-specific Authentication object, and put it + onto the SecurityContextHolder. +
+
+ The <interfacename>AuthenticationManager</interfacename> + The AuthenticationManager is just an interface, so the + implementation can be anything we choose, but how does it work in practice. What if we + need to check multiple authentication databases? The default implementation in Spring + Security is called ProviderManager and rather than handling the + authentication request itself, it delegates to a list of configured + AuthenticationProviders, each of which is queried in turn to see + if it can perform the authentication. Each provider will either throw an exception or + return a fully populated Authentication object. Remember + our good friends, UserDetails and + UserDetailsService? If not, head back to the previous + section and refresh your memory. Most AuthenticationProviders will + ask a UserDetailsService to provide a + UserDetails object. The resulting + UserDetails object - and particularly the + GrantedAuthoritys it contains - will be used when building the fully + populated Authentication object.
-
- -
- Authentication - - As mentioned in the beginning of this reference guide, Spring - Security can participate in many different authentication - environments. Whilst we recommend people use Spring Security for - authentication and not integrate with existing Container Managed - Authentication, it is nevertheless supported - as is integrating with - your own proprietary authentication system. Let's first explore - authentication from the perspective of Spring Security managing web - security entirely on its own, which is illustrative of the most - complex and most common situation. - - Consider a typical web application's authentication - process: - - - - You visit the home page, and click on a link. - - - - A request goes to the server, and the server decides that - you've asked for a protected resource. - - - - As you're not presently authenticated, the server sends back - a response indicating that you must authenticate. The response - will either be an HTTP response code, or a redirect to a - particular web page. - - - - Depending on the authentication mechanism, your browser will - either redirect to the specific web page so that you can fill out - the form, or the browser will somehow retrieve your identity (eg a - BASIC authentication dialogue box, a cookie, a X509 certificate - etc). - - - - The browser will send back a response to the server. This - will either be an HTTP POST containing the contents of the form - that you filled out, or an HTTP header containing your - authentication details. - - - - Next the server will decide whether or not the presented - credentials are valid. If they're valid, the next step will - happen. If they're invalid, usually your browser will be asked to - try again (so you return to step two above). - - - - The original request that you made to cause the - 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 an HTTP error - code 403, which means "forbidden". - - - - Spring Security has distinct classes responsible for most of the - steps described above. The main participants (in the order that they - are used) are the ExceptionTranslationFilter, an - AuthenticationEntryPoint, an authentication - mechanism, and an AuthenticationProvider. - -
- ExceptionTranslationFilter - ExceptionTranslationFilter is a Spring - Security filter that has responsibility for detecting any Spring - Security exceptions that are thrown. Such exceptions will generally be - thrown by an AbstractSecurityInterceptor, which is - the main provider of authorization services. We will discuss - AbstractSecurityInterceptor in the next section, - but for now we just need to know that it produces Java exceptions and - knows nothing about HTTP or how to go about authenticating a - principal. Instead the ExceptionTranslationFilter - offers this service, with specific responsibility for either returning - error code 403 (if the principal has been authenticated and therefore - simply lacks sufficient access - as per step seven above), or - launching an AuthenticationEntryPoint (if the - principal has not been authenticated and therefore we need to go - commence step three).
- -
- AuthenticationEntryPoint - The AuthenticationEntryPoint is responsible - for step three in the above list. As you can imagine, each web - application will have a default authentication strategy (well, this - can be configured like nearly everything else in Spring Security, but - let's keep it simple for now). Each major authentication system will - have its own AuthenticationEntryPoint - implementation, which takes actions such as described in step - three. - - After your browser decides to submit your authentication - 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 Spring - Security 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 - "Authentication request" object is built and then - presented to an - AuthenticationProvider. -
-
- AuthenticationProvider - The last player in the Spring Security authentication process is - an AuthenticationProvider. Quite simply, it is - responsible for taking an Authentication request - object and deciding whether or not it is valid. The provider will - either throw an exception or return a fully populated - Authentication object. Remember our good friends, - UserDetails and - UserDetailsService? If not, head back to the - previous section and refresh your memory. Most - AuthenticationProviders will ask a - UserDetailsService to provide a - UserDetails object. As mentioned earlier, most - application will provide their own - UserDetailsService, although some will be able to - use the JDBC or in-memory implementation that ships with Spring - Security. The resultant UserDetails object - and - particularly the GrantedAuthority[]s contained - within the UserDetails object - will be used when - building the fully populated Authentication - object. - After the authentication mechanism receives back the - fully-populated Authentication object, it will deem - the request valid, put the Authentication into the - SecurityContextHolder, and cause the original - request to be retried (step seven above). If, on the other hand, the - AuthenticationProvider rejected the request, the - authentication mechanism will ask the user agent to retry (step two - above). - -
- -
- Setting the SecurityContextHolder Contents Directly - Whilst this describes the typical authentication workflow, the - good news is that Spring Security doesn't mind how you put an - Authentication inside the - SecurityContextHolder. The only critical - requirement is that the SecurityContextHolder - contains an Authentication that represents a - principal before the AbstractSecurityInterceptor - needs to authorize a request. - - You can (and many users do) write their own filters or MVC - controllers to provide interoperability with authentication systems - that are not based on Spring Security. For example, you might be using - Container-Managed Authentication which makes the current user - available from a ThreadLocal or JNDI location. Or you might work for a - company that has a legacy proprietary authentication system, which is - a corporate "standard" over which you have little control. In such - situations it's quite easy to get Spring Security to work, and still - provide authorization capabilities. All you need to do is write a - filter (or equivalent) that reads the third-party user information - from a location, build a Spring Security-specific Authentication - object, and put it onto the SecurityContextHolder. It's quite easy to - do this, and it is a fully-supported integration approach. + Authentication in a Web Application + Now let's explore the situation where you are using Spring Security in a web + application (without web.xml security enabled). How is a user + authenticated and the security context established? + Consider a typical web application's authentication process: + + + You visit the home page, and click on a link. + + + A request goes to the server, and the server decides that you've asked for a + protected resource. + + + As you're not presently authenticated, the server sends back a response indicating + that you must authenticate. The response will either be an HTTP response code, or a + redirect to a particular web page. + + + Depending on the authentication mechanism, your browser will either redirect to the + specific web page so that you can fill out the form, or the browser will somehow + retrieve your identity (via a BASIC authentication dialogue box, a cookie, a X.509 + certificate etc.). + + + The browser will send back a response to the server. This will either be an HTTP + POST containing the contents of the form that you filled out, or an HTTP header + containing your authentication details. + + + Next the server will decide whether or not the presented credentials are valid. If + they're valid, the next step will happen. If they're invalid, usually your browser will + be asked to try again (so you return to step two above). + + + The original request that you made to cause the 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 an HTTP error code 403, which means "forbidden". + + + Spring Security has distinct classes responsible for most of the steps described above. + The main participants (in the order that they are used) are the + ExceptionTranslationFilter, an + AuthenticationEntryPoint and an authentication + mechanism, which is resposible for calling the + AuthenticationManager which we saw in the previous section. +
+ ExceptionTranslationFilter + ExceptionTranslationFilter is a Spring Security filter that has + responsibility for detecting any Spring Security exceptions that are thrown. Such + exceptions will generally be thrown by an + AbstractSecurityInterceptor, which is the main provider of + authorization services. We will discuss AbstractSecurityInterceptor + in the next section, but for now we just need to know that it produces Java exceptions and + knows nothing about HTTP or how to go about authenticating a principal. Instead the + ExceptionTranslationFilter offers this service, with specific + responsibility for either returning error code 403 (if the principal has been + authenticated and therefore simply lacks sufficient access - as per step seven above), or + launching an AuthenticationEntryPoint (if the principal has + not been authenticated and therefore we need to go commence step three). +
+
+ AuthenticationEntryPoint + The AuthenticationEntryPoint is responsible for step + three in the above list. As you can imagine, each web application will have a default + authentication strategy (well, this can be configured like nearly everything else in + Spring Security, but let's keep it simple for now). Each major authentication system will + have its own AuthenticationEntryPoint implementation, which + typically performs one of the actions described in step 3. +
+
+ Authentication Mechanism + Once your browser submits your authentication 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 Spring + Security we have a special name for the function of collecting authentication details from + a user agent (usually a web browser), referring to it as the authentication + mechanism. Examples are form-base login and Basic authentication. Once the + authentication details have been collected from the user agent, an + Authentication + request object is built and then presented to the + AuthenticationManager. + After the authentication mechanism receives back the fully-populated + Authentication object, it will deem the request valid, + put the Authentication into the + SecurityContextHolder, and cause the original request to be + retried (step seven above). If, on the other hand, the + AuthenticationManager rejected the request, the authentication + mechanism will ask the user agent to retry (step two above). +
+
+ Storing the <interfacename>SecurityContext</interfacename> between requests + Depending on the type of application, there may need to be a strategy in place to + store the security context between user operations. In a typical web application, a user + logs in once and is subsequently identified by their session Id. The server caches the + principal information for the duration session. In Spring Security, the responsibility for + storing the SecurityContext between requests falls to the + SecurityContextPersistenceFilter, which by default stores the + context as an HttpSession attribute between HTTP requests. It restores + the context to the SecurityContextHolder for each request and, + crucially, clears the SecurityContextHolder when the request + completes. You shouldn't interact directly with the HttpSession for + security purposes. There is simply no justification for doing so - always use the + SecurityContextHolder instead. + Many other types of application (for example, a stateless RESTful web service) do not + use HTTP sessions and will re-authenticate on every request. However, it is still + important that the SecurityContextPersistenceFilter is included in + the chain to make sure that the SecurityContextHolder is cleared + after each request. +
- -
- Secure Objects - - Spring Security uses the term "secure object" to refer to any - object that can have security (such as an authorization decision) applied to it. - The most common examples are method invocations and web requests. - - +
+ Access-Control (Authorization) in Spring Security + The main interface resposible for making access-control decisions in Spring Security is + the AccessDecisionMananger. It has a + decide method which takes an + Authentication object representing the principal requesting + access, a secure object (see below) and a list of security metadata attributes + which apply for the object (such as a list of roles which are required for access to be + granted).
Security and AOP Advice - If you're familiar with AOP, you'd be aware there are different - types of advice available: before, after, throws and around. An around - advice is very useful, because an advisor can elect whether or not to - proceed with a method invocation, whether or not to modify the - response, and whether or not to throw an exception. Spring Security - provides an around advice for method invocations as well as web - requests. We achieve an around advice for method invocations using Spring's - standard AOP support and we achieve an around advice for web requests using a - standard Filter. - - For those not familiar with AOP, the key point to understand is - that Spring Security can help you protect method invocations as well - as web requests. Most people are interested in securing method - invocations on their services layer. This is because the services - layer is where most business logic resides in current-generation J2EE - applications (for clarification, the author disapproves of this design - and instead advocates properly encapsulated domain objects together - with the DTO, assembly, facade and transparent persistence patterns, - but as use of anemic domain objects is the present mainstream approach, we'll - talk about it here). If you just need to secure method invocations to - the services layer, Spring's standard AOP (otherwise known as AOP Alliance) - will be adequate. If you need to secure domain objects directly, you - will likely find that AspectJ is worth considering. - - You can elect to perform method authorization using AspectJ or - Spring AOP, or you can elect to perform web request authorization - using filters. You can use zero, one, two or three of these approaches - together. The mainstream usage is to perform some web request - authorization, coupled with some Spring AOP method invocation - authorization on the services layer. + If you're familiar with AOP, you'd be aware there are different types of advice + available: before, after, throws and around. An around advice is very useful, because an + advisor can elect whether or not to proceed with a method invocation, whether or not to + modify the response, and whether or not to throw an exception. Spring Security provides an + around advice for method invocations as well as web requests. We achieve an around advice + for method invocations using Spring's standard AOP support and we achieve an around advice + for web requests using a standard Filter. + For those not familiar with AOP, the key point to understand is that Spring Security can + help you protect method invocations as well as web requests. Most people are interested in + securing method invocations on their services layer. This is because the services layer is + where most business logic resides in current-generation J2EE applications. If you just need + to secure method invocations in the services layer, Spring's standard AOP (otherwise known + as AOP Alliance) will be adequate. If you need to secure domain objects directly, you will + likely find that AspectJ is worth considering. + You can elect to perform method authorization using AspectJ or Spring AOP, or you can + elect to perform web request authorization using filters. You can use zero, one, two or + three of these approaches together. The mainstream usage pattern is to perform some web + request authorization, coupled with some Spring AOP method invocation authorization on the + services layer.
- -
- AbstractSecurityInterceptor - - Each secure object type supported by Spring Security has its own class, - which is a subclass of AbstractSecurityInterceptor. - Importantly, by the time the AbstractSecurityInterceptor is called, the - SecurityContextHolder will contain a valid - Authentication if the principal has been - authenticated. - - AbstractSecurityInterceptor provides a - consistent workflow for handling secure object requests, typically: - - - Look up the "configuration attributes" associated with the - present request - Submitting the secure object, current Authentication - and configuration attributes to the AccessDecisionManager for - an authorization decision - Optionally change the Authentication under which the invocation - takes place - Allow the secure object to proceed (assuming access was granted) - Call the AfterInvocationManager if configured, once the invocation - has returned. - - - -
- What are Configuration Attributes? - - A "configuration attribute" can be thought of as a String that has special meaning to the classes used by - AbstractSecurityInterceptor. They may be simple role names or have more complex meaning, depending on the - how sophisticated the AccessDecisionManager implementation is. - The AbstractSecurityInterceptor is configured with a SecurityMetadataSource which - it uses to look up the attributes for a secure object. Usually this configuration will be hidden from the user. Configuration - attributes will be entered as annotations on secured methods, or as access attributes on secured URLs (using the - namespace <intercept-url> syntax). - -
- -
- RunAsManager - Assuming AccessDecisionManager decides to - allow the request, the AbstractSecurityInterceptor - will normally just proceed with the request. Having said that, on rare - occasions users may want to replace the - Authentication inside the - SecurityContext with a different - Authentication, which is handled by the - AccessDecisionManager calling a - RunAsManager. This might be useful in reasonably - unusual situations, such as if a services layer method needs to call a - remote system and present a different identity. Because Spring - Security automatically propagates security identity from one server to - another (assuming you're using a properly-configured RMI or - HttpInvoker remoting protocol client), this may be useful. -
- -
- AfterInvocationManager - Following the secure object proceeding and then returning - - which may mean a method invocation completing or a filter chain - proceeding - the AbstractSecurityInterceptor gets - one final chance to handle the invocation. At this stage the - AbstractSecurityInterceptor is interested in - possibly modifying the return object. We might want this to happen - because an authorization decision couldn't be made "on the way in" to - a secure object invocation. Being highly pluggable, - AbstractSecurityInterceptor will pass control to an - AfterInvocationManager to actually modify the - object if needed. This class can even entirely replace the object, or - throw an exception, or not change it in any way. - - AbstractSecurityInterceptor and its related objects - are shown in . - -
- The key "secure object" model - - - - - - - - -
-
-
- -
- Extending the Secure Object Model - Only developers contemplating an entirely new way of - intercepting and authorizing requests would need to use secure objects - directly. For example, it would be possible to build a new secure - object to secure calls to a messaging system. Anything that requires - security and also provides a way of intercepting a call (like the AOP - around advice semantics) is capable of being made into a secure - object. Having said that, most Spring applications will simply use the - three currently supported secure object types (AOP Alliance - MethodInvocation, AspectJ - JoinPoint and web request - FilterInvocation) with complete - transparency. +
+ Secure Objects and the <classname>AbstractSecurityInterceptor</classname> + So what is a secure object anyway? Spring Security + uses the term to refer to any object that can have security (such as an authorization + decision) applied to it. The most common examples are method invocations and web + requests. + Each supported secure object type has its own interceptor class, which is a subclass of + AbstractSecurityInterceptor. Importantly, by the time the + AbstractSecurityInterceptor is called, the + SecurityContextHolder will contain a valid + Authentication if the principal has been + authenticated. + AbstractSecurityInterceptor provides a consistent workflow for + handling secure object requests, typically: + + Look up the configuration attributes associated with the present + request + + + Submitting the secure object, current + Authentication and configuration attributes to the + AccessDecisionManager for an authorization + decision + + + Optionally change the Authentication under which + the invocation takes place + + + Allow the secure object invocation to proceed (assuming access was granted) + + + Call the AfterInvocationManager if configured, once + the invocation has returned. + + +
+ What are Configuration Attributes? + A configuration attribute can be thought of as a String that has + special meaning to the classes used by AbstractSecurityInterceptor. + They may be simple role names or have more complex meaning, depending on the how + sophisticated the AccessDecisionManager implementation is. + The AbstractSecurityInterceptor is configured with a + SecurityMetadataSource which it uses to look up the + attributes for a secure object. Usually this configuration will be hidden from the user. + Configuration attributes will be entered as annotations on secured methods, or as access + attributes on secured URLs (using the namespace <intercept-url> + syntax). +
+
+ RunAsManager + Assuming AccessDecisionManager decides to allow the + request, the AbstractSecurityInterceptor will normally just proceed + with the request. Having said that, on rare occasions users may want to replace the + Authentication inside the + SecurityContext with a different + Authentication, which is handled by the + AccessDecisionManager calling a + RunAsManager. This might be useful in reasonably unusual situations, + such as if a services layer method needs to call a remote system and present a different + identity. Because Spring Security automatically propagates security identity from one + server to another (assuming you're using a properly-configured RMI or HttpInvoker remoting + protocol client), this may be useful. +
+
+ AfterInvocationManager + Following the secure object proceeding and then returning - which may mean a method + invocation completing or a filter chain proceeding - the + AbstractSecurityInterceptor gets one final chance to handle the + invocation. At this stage the AbstractSecurityInterceptor is + interested in possibly modifying the return object. We might want this to happen because + an authorization decision couldn't be made on the way in to a secure object invocation. + Being highly pluggable, AbstractSecurityInterceptor will pass + control to an AfterInvocationManager to actually modify the object if + needed. This class can even entirely replace the object, or throw an exception, or not + change it in any way as it chooses. + AbstractSecurityInterceptor and its related objects are shown + in .
+ Security interceptors and the <quote>secure object</quote> model + + + + + +
+
+
+ Extending the Secure Object Model + Only developers contemplating an entirely new way of intercepting and authorizing + requests would need to use secure objects directly. For example, it would be possible to + build a new secure object to secure calls to a messaging system. Anything that requires + security and also provides a way of intercepting a call (like the AOP around advice + semantics) is capable of being made into a secure object. Having said that, most Spring + applications will simply use the three currently supported secure object types (AOP + Alliance MethodInvocation, AspectJ JoinPoint + and web request FilterInvocation) with complete + transparency. +
-
- \ No newline at end of file + diff --git a/docs/manual/src/resources/css/highlight.css b/docs/manual/src/resources/css/highlight.css new file mode 100644 index 0000000000..ffefef72de --- /dev/null +++ b/docs/manual/src/resources/css/highlight.css @@ -0,0 +1,35 @@ +/* + code highlight CSS resemblign the Eclipse IDE default color schema + @author Costin Leau +*/ + +.hl-keyword { + color: #7F0055; + font-weight: bold; +} + +.hl-comment { + color: #3F5F5F; + font-style: italic; +} + +.hl-multiline-comment { + color: #3F5FBF; + font-style: italic; +} + +.hl-tag { + color: #3F7F7F; +} + +.hl-attribute { + color: #7F007F; +} + +.hl-value { + color: #2A00FF; +} + +.hl-string { + color: #2A00FF; +} \ No newline at end of file diff --git a/docs/manual/src/resources/css/manual.css b/docs/manual/src/resources/css/manual.css new file mode 100644 index 0000000000..4314f6b328 --- /dev/null +++ b/docs/manual/src/resources/css/manual.css @@ -0,0 +1,59 @@ +@IMPORT url("highlight.css"); + +html { + padding: 0pt; + margin: 0pt; +} + +body { + margin-left: 10%; + margin-right: 10%; + font-family: Arial, Sans-serif; +} + +div { + margin: 0pt; +} + +p { + text-align: justify; +} + +hr { + border: 1px solid gray; + background: gray; +} + +h1,h2,h3,h4 { + color: #234623; + font-family: Arial, Sans-serif; +} + +pre { + line-height: 1.0; + color: black; +} + +pre.programlisting { + font-size: 10pt; + padding: 7pt 3pt; + border: 1pt solid black; + background: #eeeeee; + clear: both; +} + +div.table { + margin: 1em; + padding: 0.5em; + text-align: center; +} + +div.table table { + display: table; + width: 100%; +} + +div.table td { + padding-left: 7px; + padding-right: 7px; +} diff --git a/docs/manual/src/resources/images/i21-banner-rhs.jpg b/docs/manual/src/resources/images/i21-banner-rhs.jpg deleted file mode 100644 index 8b24a7736d9408e6d768f9daf1870f6d946e35eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10504 zcma*NbyOTM(=WWRP~6?UIK|x-cPT7Tw74v;1zOy?=;H3~?ofR3;<`|rq6OMgD0cgv z?|%2*_pkT)<>Z_slSw9%RSAHE3;@{t3xJn%0D*#!HN+o)1V91& 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 + + + + + + + + + '5' + '1' + + + 1 + + + 1 + 0 + 1 + + + + images/ + .gif + + 120 + images/callouts/ + .gif + + + css/manual.css + text/css + book toc,title + + text-align: left + + + + + + + + + + + + + + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Begin Google Analytics code + + + End Google Analytics code + + + + + Begin LoopFuse code + + + End LoopFuse code + + + \ No newline at end of file diff --git a/docs/manual/src/xsl/pdf-custom.xsl b/docs/manual/src/xsl/pdf-custom.xsl new file mode 100644 index 0000000000..c761e4500b --- /dev/null +++ b/docs/manual/src/xsl/pdf-custom.xsl @@ -0,0 +1,501 @@ + + + + + + + + + '1' + images/ + + + + + + + + + + + + + + + + + + + + -5em + -5em + + + + + + book toc,title + + + + + + + + + + + + + + + + + please define productname in your docbook file! + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 0 + 0 + + + + false + + + 11 + 8 + + + 1.4 + + + + left + bold + + + pt + + + + + + + + + + + + + + + + 0.8em + 0.8em + 0.8em + + + pt + + 0.1em + 0.1em + 0.1em + + + 0.6em + 0.6em + 0.6em + + + pt + + 0.1em + 0.1em + 0.1em + + + 0.4em + 0.4em + 0.4em + + + pt + + 0.1em + 0.1em + 0.1em + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 4pt + 4pt + 4pt + 4pt + + + + 0.1pt + 0.1pt + + + + + + + + + + + + + + + + + + pt + + + + + 1em + 1em + 1em + 0.1em + 0.1em + 0.1em + + #444444 + solid + 0.1pt + 0.5em + 0.5em + 0.5em + 0.5em + 0.5em + 0.5em + + + + 1 + + #F0F0F0 + + + + 0.1em + 0.1em + 0.1em + 0.1em + 0.1em + 0.1em + + + + 0.5em + 0.5em + 0.5em + 0.1em + 0.1em + 0.1em + always + + + + + + normal + italic + + + pt + + false + 0.1em + 0.1em + 0.1em + + + + + + + + + + + figure after + example after + equation before + table before + procedure before + + + + 1 + + 0pt + + + 3 + + + + + + + + + + + + + + + + + + \ No newline at end of file