Vamos a configuração do projeto. Crie um projeto, e no pom.xml acrescente as seguintes dependências:
Crie uma classe para as configurações de base de dados, ex.: JdbcConfiguration
Crie uma classe que vai estender a classe ResourceServerConfigurerAdapter e iremos sobrescrever os 2 métodos configure. Nestes métodos estarão as configurações necessárias para a validação do token, clientId e do usuário logado e as regras do HTTP Security. Ex.: AuthorizationClientConfiguration
Acrescente a notação @EnableResourceServer para habilitar o filtro Spring Security que autentique as request por meio do token do Oauth2.
Observe que utilizamos o bean TokenStore configurado na classe JdbcConfiguration.
Crie uma classe que vai estender a classe GlobalMethodSecurityConfiguration e iremos sobrescrever 1 método. Ex.: MethodSecurityConfiguration
Acrescente a notação @EnableGlobalMethodSecurity para habilitar a segurança do método global Spring Security.
Crie uma classe que vai implementar a classe WebMvcConfigurer. Ex.: ResourceServerWebConfiguration
Acrescente a notação @EnableWebSecurity para ter as configurações do Spring Security.
Agora vamos criar o Controller, crie uma classe ex.: TestController, acrescente a notação @Controller. E crie um método conforme o exemplo. O ponto principal é a notação @PreAuthorize, onde definimos os scopes e roles que terão permissão de execução.
Vamos ao testes.
User: developer
Gerando um token:
Executando o método /test
User: tester
Executando o método /test e acesso negado:
Log:
O projeto deste post está no meu github link.