diff --git a/config/src/main/java/org/springframework/security/config/annotation/web/configuration/WebSecurityConfigurerAdapter.java b/config/src/main/java/org/springframework/security/config/annotation/web/configuration/WebSecurityConfigurerAdapter.java index a6cfc7e8a1..69745801cb 100644 --- a/config/src/main/java/org/springframework/security/config/annotation/web/configuration/WebSecurityConfigurerAdapter.java +++ b/config/src/main/java/org/springframework/security/config/annotation/web/configuration/WebSecurityConfigurerAdapter.java @@ -104,29 +104,50 @@ public abstract class WebSecurityConfigurerAdapter implements SecurityConfigurer } /** - * Used by the default implementation of {@link #authenticationManager()} to attempt to obtain an - * {@link AuthenticationManager}. If overridden, the {@link AuthenticationManagerBuilder} should be used to specify - * the {@link AuthenticationManager}. The resulting {@link AuthenticationManager} - * will be exposed as a Bean as will the last populated {@link UserDetailsService} that is created with the - * {@link AuthenticationManagerBuilder}. The {@link UserDetailsService} will also automatically be populated on - * {@link HttpSecurity#getSharedObject(Class)} for use with other {@link SecurityContextConfigurer} - * (i.e. RememberMeConfigurer ) + * Used by the default implementation of {@link #authenticationManager()} to + * attempt to obtain an {@link AuthenticationManager}. If overridden, the + * {@link AuthenticationManagerBuilder} should be used to specify the + * {@link AuthenticationManager}. * - *

For example, the following configuration could be used to register - * in memory authentication that exposes an in memory {@link UserDetailsService}:

+ *

+ * The {@link #authenticationManagerBean()} method can be used to expose the + * resulting {@link AuthenticationManager} as a Bean. The + * {@link #userDetailsServiceBean()} can be used to expose the last + * populated {@link UserDetailsService} that is created with the + * {@link AuthenticationManagerBuilder} as a Bean. The + * {@link UserDetailsService} will also automatically be populated on + * {@link HttpSecurity#getSharedObject(Class)} for use with other + * {@link SecurityContextConfigurer} (i.e. RememberMeConfigurer ) + *

+ * + *

+ * For example, the following configuration could be used to register in + * memory authentication that exposes an in memory + * {@link UserDetailsService}: + *

* *
      * @Override
      * protected void registerAuthentication(AuthenticationManagerBuilder auth) {
      *     auth
-     *         // enable in memory based authentication with a user named "user" and "admin"
+     *         // enable in memory based authentication with a user named
+     *         // "user" and "admin"
      *         .inMemoryAuthentication()
-     *             .withUser("user").password("password").roles("USER").and()
-     *             .withUser("admin").password("password").roles("USER", "ADMIN");
+     *             .withUser("user").password("password").roles("USER").and()
+     *             .withUser("admin").password("password").roles("USER", "ADMIN");
      * }
+     *
+     * // Expose the UserDetailsService as a Bean
+     * @Bean
+     * @Override
+     * public UserDetailsService userDetailsServiceBean() throws Exception {
+     *     return super.userDetailsServiceBean();
+     * }
+     *
      * 
* - * @param auth the {@link AuthenticationManagerBuilder} to use + * @param auth + * the {@link AuthenticationManagerBuilder} to use * @throws Exception */ protected void registerAuthentication(AuthenticationManagerBuilder auth) throws Exception {