/*** 認證服務器配置* Created by macro on 2019/9/30.*/@Configuration@EnableAuthorizationServerpublicclassAuthorizationServerConfigextendsAuthorizationServerConfigurerAdapter{@Autowiredprivate PasswordEncoder passwordEncoder;@Autowiredprivate AuthenticationManager authenticationManager;@Autowiredprivate UserService userService;/*** 使用密碼模式需要配置*/@Overridepublicvoidconfigure(AuthorizationServerEndpointsConfigurer endpoints){endpoints.authenticationManager(authenticationManager).userDetailsService(userService);}@Overridepublicvoidconfigure(ClientDetailsServiceConfigurer clients)throws Exception {clients.inMemory().withClient("admin")//配置client_id.secret(passwordEncoder.encode("admin123456"))//配置client_secret.accessTokenValiditySeconds(3600)//配置訪問token的有效期.refreshTokenValiditySeconds(864000)//配置刷新token的有效期.redirectUris("http://www.baidu.com")//配置redirect_uri,用于授權成功后跳轉.scopes("all")//配置申請的權限范圍.authorizedGrantTypes("authorization_code","password");//配置grant_type,表示授權類型}}
添加資源服務器配置,使用@EnableResourceServer注解開啟
/*** 資源服務器配置* Created by macro on 2019/9/30.*/@Configuration@EnableResourceServerpublicclassResourceServerConfigextendsResourceServerConfigurerAdapter{@Overridepublicvoidconfigure(HttpSecurity http)throws Exception {http.authorizeRequests().anyRequest().authenticated().and().requestMatchers().antMatchers("/user/**");//配置需要保護的資源路徑}}
添加SpringSecurity配置,允許認證相關路徑的訪問及表單登錄:
/*** SpringSecurity配置* Created by macro on 2019/10/8.*/@Configuration@EnableWebSecuritypublicclassSecurityConfigextendsWebSecurityConfigurerAdapter{@Beanpublic PasswordEncoder passwordEncoder(){returnnewBCryptPasswordEncoder();}@Bean@Overridepublic AuthenticationManager authenticationManagerBean()throws Exception {returnsuper.authenticationManagerBean();}@Overridepublicvoidconfigure(HttpSecurity http)throws Exception {http.csrf().disable().authorizeRequests().antMatchers("/oauth/**","/login/**","/logout/**").permitAll().anyRequest().authenticated().and().formLogin().permitAll();}}
添加需要登錄的接口用于測試:
/*** Created by macro on 2019/9/30.*/@RestController@RequestMapping("/user")publicclassUserController{@GetMapping("/getCurrentUser")public Object getCurrentUser(Authentication authentication){return authentication.getPrincipal();}}