1. 程式人生 > >springboot+Oauth2——自定義AuthenticationManager和認證path

springboot+Oauth2——自定義AuthenticationManager和認證path

@Configuration
public class OAuth2Configuration {
	


	    @SpringBootApplication
	    @RestController
	    @EnableResourceServer
	    @Configuration
	    @EnableAuthorizationServer
	    protected static class AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter implements EnvironmentAware {
	
	        private static final String ENV_OAUTH = "authentication.oauth.";
	        private static final String PROP_CLIENTID = "clientid";
	        private static final String PROP_SECRET = "secret";
	        private static final String PROP_TOKEN_VALIDITY_SECONDS = "tokenValidityInSeconds";
	
	        private RelaxedPropertyResolver propertyResolver;
	
	        @Autowired
	        private DataSource dataSource;
	
	        @Bean
	        public TokenStore tokenStore() {
	            return new JdbcTokenStore(dataSource);
	        }
	
//	        @Autowired
//	    	@Qualifier("authenticationManagerBean")   
//	        private AuthenticationManager authenticationManager;
	        
	        @Autowired
	    	@Qualifier("daoAuhthenticationOauthProvider")   
	        private AuthenticationProvider daoAuhthenticationOauthProvider;
	       
	        
			@Override
			public void configure(AuthorizationServerEndpointsConfigurer endpoints)
					throws Exception {
				// @formatter:off
				endpoints
				.tokenStore(tokenStore())
				.authenticationManager(new AuthenticationManager(){
					@Override
					public Authentication authenticate(Authentication authentication) throws AuthenticationException {
						// TODO Auto-generated method stub
						return daoAuhthenticationOauthProvider.authenticate(authentication);
					}
					
				});
				
				// @formatter:on
			}
			
	        
	        @Override
	        public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
	            clients
	                .inMemory()
	                .withClient(propertyResolver.getProperty(PROP_CLIENTID))
	                .scopes("read", "write")
	                .authorities(Authorities.ROLE_CHANNEL.name())
	                .authorizedGrantTypes("password", "refresh_token")
	                .secret(propertyResolver.getProperty(PROP_SECRET))
	                .accessTokenValiditySeconds(propertyResolver.getProperty(PROP_TOKEN_VALIDITY_SECONDS, Integer.class, 1800));
	        }
	   
	        
	        @Override
	        public void setEnvironment(Environment environment) {
	            this.propertyResolver = new RelaxedPropertyResolver(environment, ENV_OAUTH);
	        }
	        
	        @Configuration
	        @EnableResourceServer
	        protected static class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {
	            @Override
	            public void configure(HttpSecurity http) throws Exception {
	                http
	                .antMatcher("/api/dev/**")
		                .authorizeRequests()
		                .anyRequest()
		                .hasRole("DEVELEPOR")
		            .and()
	                .antMatcher("/api/channel/**")
		                .authorizeRequests()
		                .anyRequest()
		                .hasRole("CHANNEL");
	            }
	        }

	    }

}