title: No Bean for ResourceServerTokenServices found - Spring-Security-Oauth2
body: <p>I'm building a sample project with spring-boot just to learn something about it.<br>
  Specifically, i'm trying to integrate spring-security-oauth2 module to secure my rest services.
  I followed this sample project that shows a very simple in-memory login system: <a href="https://github.com/royclarkson/spring-rest-service-oauth" rel="nofollow">https://github.com/royclarkson/spring-rest-service-oauth</a><br>
  It works, and this is good.<br>
  Anyway, when I tried to integrate it in my application i get the following exception:  </p>
  
  <pre><code>...    
  Caused by: java.lang.IllegalStateException: Could not wire ResourceServerTokenServices: please create a bean definition and mark it as @Primary.
          at org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfiguration.resolveTokenServices(ResourceServerConfiguration.java:170) ~[spring-security-oauth2-2.0.4.RELEASE.jar:na]
          at org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfiguration.configure(ResourceServerConfiguration.java:140) ~[spring-security-oauth2-2.0.4.RELEASE.jar:na]
          at org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter.getHttp(WebSecurityConfigurerAdapter.java:199) ~[spring-security-config-3.2.5.RELEASE.jar:3.2.5.RELEASE]
          at org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter.init(WebSecurityConfigurerAdapter.java:283) ~[spring-security-config-3.2.5.RELEASE.jar:3.2.5.RELEASE]
          at org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter.init(WebSecurityConfigurerAdapter.java:68) ~[spring-security-config-3.2.5.RELEASE.jar:3.2.5.RELEASE]
          at org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfiguration$$EnhancerByCGLIB$$71f30f65.init(&lt;generated&gt;) ~[spring-core-4.0.1.RELEASE.jar:na]
          at org.springframework.security.config.annotation.AbstractConfiguredSecurityBuilder.init(AbstractConfiguredSecurityBuilder.java:367) ~[spring-security-config-3.2.5.RELEASE.jar:3.2.5.RELEASE]
          at org.springframework.security.config.annotation.AbstractConfiguredSecurityBuilder.doBuild(AbstractConfiguredSecurityBuilder.java:320) ~[spring-security-config-3.2.5.RELEASE.jar:3.2.5.RELEASE]
          at org.springframework.security.config.annotation.AbstractSecurityBuilder.build(AbstractSecurityBuilder.java:39) ~[spring-security-config-3.2.5.RELEASE.jar:3.2.5.RELEASE]
          at org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration.springSecurityFilterChain(WebSecurityConfiguration.java:92) ~[spring-security-config-3.2.5.RELEASE.jar:3.2.5.RELEASE]
          at org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration$$EnhancerByCGLIB$$373175f.CGLIB$springSecurityFilterChain$3(&lt;generated&gt;) ~[spring-core-4.0.1.RELEASE.jar:3.2.5.RELEASE]
          at org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration$$EnhancerByCGLIB$$373175f$$FastClassByCGLIB$$ffddf00e.invoke(&lt;generated&gt;) ~[spring-core-4.0.1.RELEASE.jar:3.2.5.RELEASE]
          at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) ~[spring-core-4.0.1.RELEASE.jar:4.0.1.RELEASE]
          at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:326) ~[spring-context-4.0.1.RELEASE.jar:4.0.1.RELEASE]
          at org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration$$EnhancerByCGLIB$$373175f.springSecurityFilterChain(&lt;generated&gt;) ~[spring-core-4.0.1.RELEASE.jar:3.2.5.RELEASE]
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0]
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0]
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0]
          at java.lang.reflect.Method.invoke(Method.java:483) ~[na:1.8.0]
          at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:166) ~[spring-beans-4.0.1.RELEASE.jar:4.0.1.RELEASE]
          ... 27 common frames omitted
  </code></pre>
  
  <p>From what i know, the DefaultTokenServices implementation of ResourceServerTokenServices should be ready to use, without further implementation (at leas for this simple scenario). Am I wrong?  </p>
  
  <p>The following snippets are my oauth configuration classes:  </p>
  
  <p><strong>AuthorizationServerConfiguration:</strong></p>
  
  <pre><code>@Configuration @EnableAuthorizationServer
  public class AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter {
  
      private TokenStore tokenStore = new InMemoryTokenStore();
  
      @Inject
      @Qualifier("authenticationManagerBean")
      private AuthenticationManager authenticationManager;
  
      @Inject
      private ResourceIdProvider resourceIdProvider;
  
      @Override
      public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
          endpoints
              .tokenStore(tokenStore)
              .authenticationManager(authenticationManager);
      }
  
      @Override
      public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
          clients
              .inMemory()
              .withClient("clientapp")
              .authorizedGrantTypes("password", "refresh_token")
              .authorities("USER")
              .scopes("read", "write")
              .resourceIds(this.resourceIdProvider.getResourceId())
              .secret("123456");
      }
  
      @Bean
      public ResourceServerTokenServices tokenServices() {
          DefaultTokenServices tokenServices = new DefaultTokenServices();
          tokenServices.setSupportRefreshToken(true);
          tokenServices.setTokenStore(this.tokenStore);
          return tokenServices;
      } } 
  </code></pre>
  
  <p><strong>ResourceServerConfigurationImpl:</strong></p>
  
  <pre><code>@Configuration @EnableResourceServer
  public class ResourceServerConfigurationImpl extends ResourceServerConfigurerAdapter {
  
      @Inject
      private ResourceIdProvider resourceIdProvider;
  
      @Override
      public void configure(ResourceServerSecurityConfigurer resources) {
          resources.resourceId(this.resourceIdProvider.getResourceId());
      }
  
      @Override
      public void configure(HttpSecurity http) throws Exception {
          http
              .authorizeRequests()
              .antMatchers("/rest/user")
              .authenticated();
      } } 
  </code></pre>
  
  <p><strong>InMemoryWebSecurityConfiguration:</strong></p>
  
  <pre><code>@Configuration @EnableWebSecurity
  public class InMemoryWebSecurityConfiguration extends WebSecurityConfigurerAdapter {
  
      @Override
      protected void configure(AuthenticationManagerBuilder auth) throws Exception {
          auth
              .inMemoryAuthentication()
              .withUser("roy")
              .password("spring")
              .roles("USER");
      }
  
      @Override
      @Bean
      public AuthenticationManager authenticationManagerBean() throws Exception {
          return super.authenticationManagerBean();
      }
  
  }
  </code></pre>
  
  <p>Can somebody help me get this running?<br>
  If you need more code let me know.<br>
  Thanks in advance!</p>