title: spring circular dependencies
body: <p>I have the following configuration:</p>
  
  <pre><code>@Configuration
  @EnableWebSecurity
  @EnableGlobalMethodSecurity(prePostEnabled=true)
  public class SecurityConfig {
      private static final Logger LOGGER = LoggerFactory.getLogger(SecurityConfig.class);
      @Resource
      private UserDetailsService userDetailsService;
      @Resource
      private PasswordEncoder passwordEncoder;
  
      .....
  
      @Configuration
      @Order(2)
      public static class MobileApiSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
          @Resource
          private UserDetailsService userDetailsService;
          @Resource
          private PasswordEncoder passwordEncoder;
          @Autowired
          private CustomBasicAuthenticationFilter customBasicAuthenticationFilter;
          @Autowired
          private TokenSecurityFilter tokenSecurityFilter;
  
          protected void configure(AuthenticationManagerBuilder auth) throws Exception {
  
              auth
              .userDetailsService(userDetailsService)
              .passwordEncoder(passwordEncoder);
  
          }
  
          protected void configure(HttpSecurity http) throws Exception {
              http
                  .addFilter(customBasicAuthenticationFilter)
                  .addFilterBefore(tokenSecurityFilter, CustomBasicAuthenticationFilter.class)
                  .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
                      .csrf().disable()
                  .authorizeRequests()           
                      .antMatchers(Mappings.MOBILE_API + "/**").hasAnyRole(Globals.MOBILE_API_USER_ROLE)
                      .and()
                  .exceptionHandling()
                      .authenticationEntryPoint(new CustomBasicAuthenticationEntryPoint())
                      .and()
                  .requestCache()
                      .requestCache(new NullRequestCache());
          }
  
      }
  </code></pre>
  
  <p>This is my custom filter:</p>
  
  <pre><code>@Component
  public class CustomBasicAuthenticationFilter extends BasicAuthenticationFilter {
      private static final Logger LOGGER = LoggerFactory.getLogger(CustomBasicAuthenticationFilter.class);
      @Autowired
      private PrincipalRepository principalRepository;
      @Autowired
      private AuthenticationCache authenticationCache;
  
      @Autowired
      public CustomBasicAuthenticationFilter(AuthenticationManager authenticationManager) {
         super(authenticationManager);
      }
  
      @Override
      protected void onSuccessfulAuthentication(HttpServletRequest request, HttpServletResponse response,
              Authentication authResult) throws IOException {
          Principal principal = principalRepository.findOne(PrincipalPredicates.userNameEquals(authResult.getName()));
  
          if (principal != null) {
              principal.setLastLoginTime(DateTime.now());
              principalRepository.save(principal);
          } else {
              LOGGER.error("Unable to retrieve user " + authResult.getName());
          }
  
          authenticationCache.add(authResult, request, response);
  
          super.onSuccessfulAuthentication(request, response, authResult);
      }
  }
  </code></pre>
  
  <p>But, when trying to deploy to Tomcat, the following exception is thrown:</p>
  
  <pre><code>Error creating bean with name 'customBasicAuthenticationFilter' defined in file [C:\work\...]: Unsatisfied dependency expressed through constructor argument with index 0 of type [org.springframework.security.authentication.AuthenticationManager]: : No qualifying bean of type [org.springframework.security.authentication.AuthenticationManager] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.security.authentication.AuthenticationManager] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
  </code></pre>
  
  <p>I am not sure why my filter is looking for an authenticationManager since I am autowiring it. Help is appreciated it.</p>
  
  <p><strong>Updated Question:  I added this code to resolve the authenticationManager issue</strong>:</p>
  
  <pre><code>@Bean(name="myAuthenticationManager")
             @Override
             public AuthenticationManager authenticationManagerBean() throws Exception {
                 return super.authenticationManagerBean();
             }
  </code></pre>
  
  <p>By adding the above, I am able to get past the authenticationManager issue, but now I am getting this issue:</p>
  
  <pre><code>    org.springframework.beans.factory.BeanCreationException:
   Could not autowire field: private CustomBasicAuthenticationFilter SecurityConfig$MobileApiSecurityConfigurerAdapter.customBasicAuthenticationFilter; 
  nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: 
  Error creating bean with name 'customBasicAuthenticationFilter':
   Requested bean is currently in creation: Is there an unresolvable circular reference?
  </code></pre>
  
  <p>Thanks</p>