title: Spring boot Security Config - authenticationManager must be specified
body: <p>Here's my main Application config</p>
  
  <pre><code>@SpringBootApplication
  public class Application {
  
      public static void main(String[] args) {
          new SpringApplicationBuilder(Application.class)
                  .banner((environment, aClass,  printStream) -&gt;
                          System.out.println(stringBanner()))
                  .run();
      }
  }
  </code></pre>
  
  <p>And here's my spring security application config.</p>
  
  <pre><code>@Configuration
  @EnableGlobalMethodSecurity(prePostEnabled = true)
  @EnableWebMvcSecurity
  public class SecurityConfig extends WebSecurityConfigurerAdapter {
  
      @Autowired
      private WebServiceAuthenticationEntryPoint unauthorizedHandler;
  
      @Autowired
      private TokenProcessingFilter authTokenProcessingFilter;
  
      @Bean
      @Override
      public AuthenticationManager authenticationManagerBean() throws Exception {
          return super.authenticationManagerBean();
      }
  
      @Override
      protected void configure(HttpSecurity http) throws Exception {
          http
                  .csrf()
                  .disable()
                  .sessionManagement()
                  .sessionCreationPolicy(SessionCreationPolicy.STATELESS) // Restful hence stateless
                  .and()
                  .exceptionHandling()
                  .authenticationEntryPoint(unauthorizedHandler) // Notice the entry point
                  .and()
                  .addFilter(authTokenProcessingFilter) // Notice the filter
                  .authorizeRequests()
                  .antMatchers("/resources/**", "/api/auth")
                  .permitAll()
                  .antMatchers("/greeting")
                  .hasRole("USER");
      }
  
      @Autowired
      public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
          auth
                  .inMemoryAuthentication()
                  .withUser("user")
                  .password("password")
                  .roles("USER");
      }
  }
  </code></pre>
  
  <p>Here's my TokenProcessingFilter that extends UsernamePasswordAuthenticationFilter  for my custom authentication filter</p>
  
  <pre><code>@Component
  public class TokenProcessingFilter extends UsernamePasswordAuthenticationFilter {
  
      @Override
      public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
          HttpServletRequest httpRequest = this.getAsHttpRequest(request);
          String authToken = this.extractAuthTokenFromRequest(httpRequest);
          String userName = TokenUtils.getUserNameFromToken(authToken);
          if (userName != null) {/*
              UserDetails userDetails = userDetailsService.loadUserByUsername(userName);*/
              UserDetails userDetails = fakeUserDetails();
              if (TokenUtils.validateToken(authToken, userDetails)) {
                  UsernamePasswordAuthenticationToken authentication =
                          new UsernamePasswordAuthenticationToken(userDetails.getUsername(), userDetails.getPassword(), userDetails.getAuthorities());
                  authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(httpRequest));
                  SecurityContextHolder.getContext().setAuthentication(authentication);
                  Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
              }
          }
          chain.doFilter(request, response);
      }
  
      private HttpServletRequest getAsHttpRequest(ServletRequest request){
          if (!(request instanceof HttpServletRequest)) {
              throw new RuntimeException("Expecting an HTTP request");
          }
          return (HttpServletRequest) request;
      }
  
  
      private String extractAuthTokenFromRequest(HttpServletRequest httpRequest) {
          /* Get token from header */
          String authToken = httpRequest.getHeader("x-auth-token");
          /* If token not found get it from request parameter */
          if (authToken == null) {
              authToken = httpRequest.getParameter("token");
          }
          return authToken;
      }
  
      private UserDetails fakeUserDetails(){
          UsernamePasswordAuthenticationToken authenticationToken = new
                  UsernamePasswordAuthenticationToken("user","password");
  
          List&lt;SimpleGrantedAuthority&gt; auth= new ArrayList&lt;&gt;();
          auth.add(new SimpleGrantedAuthority("USER"));
          return  new User("user","password",auth);
      }
  }
  </code></pre>
  
  <p>however when running the application, I encounter this exception message. What am I missing?</p>
  
  <blockquote>
    <p>An exception occured while running. null: InvocationTargetException:
    Unable to start embedded container; nested exception is
    org.springframework.boot.context.embedded.EmbeddedServletContainerException:
    Unable to start embedded Tomcat: Error creating bean with name
    'tokenProcessingFilter' defined in file
    [C:\Users\kyel\projects\app\target\classes\org\app\testapp\security\TokenProcessingFilter.class]:
    Invocation of init method failed; nested exception is
    java.lang.IllegalArgumentException: authenticationManager must be
    specified</p>
  </blockquote>