我遵循了这里提到的一些建议,但对我没有用。因此,将问题放在这里
谁能指导我这是什么问题以及如何解决?
错误:
*************************** APPLICATION FAILED TO START *************************** Description: Field authenticationManager in com.techprimers.security.springsecurityauthserver.config.AuthorizationServerConfig required a bean of type 'org.springframework.security.authentication.AuthenticationManager' that could not be found. Action: Consider defining a bean of type 'org.springframework.security.authentication.AuthenticationManager' in your configuration.
AuthorizationServerConfig.java
@Configuration @EnableAuthorizationServer public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter { @Autowired private AuthenticationManager authenticationManager; @Override public void configure(AuthorizationServerSecurityConfigurer security) throws Exception { security.tokenKeyAccess("permitAll()") .checkTokenAccess("isAuthenticated()"); } @Override public void configure(ClientDetailsServiceConfigurer clients) throws Exception { clients .inMemory() .withClient("ClientId") .secret("secret") .authorizedGrantTypes("authorization_code") .scopes("user_info") .autoApprove(true); } @Override public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception { endpoints.authenticationManager(authenticationManager); } }
ResourceServerConfig.java
@EnableResourceServer @Configuration public class ResourceServerConfig extends WebSecurityConfigurerAdapter { @Autowired @Qualifier("authenticationManagerBean") private AuthenticationManager authenticationManager; @Autowired private UserDetailsService customUserDetailsService; @Override protected void configure(HttpSecurity http) throws Exception { http.requestMatchers() .antMatchers("/login", "/oauth/authorize") .and() .authorizeRequests() .anyRequest() .authenticated() .and() .formLogin() .permitAll(); } @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.parentAuthenticationManager(authenticationManager) .userDetailsService(customUserDetailsService); } }
取自https://github.com/TechPrimers/spring-security-oauth-mysql- example的代码参考,仅将Spring Boot Parent Version更新为2.0.4.RELEASE,事情开始中断。
2.0.4.RELEASE
看来这是Spring Boot 2.0引入的“重大更改”之一。我相信《Spring Boot 2.0迁移指南》中描述了您的情况。
在您的WebSecurityConfigurerAdapter类中,您需要重写authenticationManagerBeanmethod并使用进行注释@Bean,即:
WebSecurityConfigurerAdapter
authenticationManagerBean
@Bean
@Override @Bean public AuthenticationManager authenticationManagerBean() throws Exception { return super.authenticationManagerBean(); }
此外,您可以使用方法WebSecurityConfigurerAdapter来代替注入AuthenticationManager实例,即:@Autowired``authenticationManagerBean()
AuthenticationManager
@Autowired``authenticationManagerBean()
@Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.parentAuthenticationManager(authenticationManagerBean()); .userDetailsService(customUserDetailsService); }