BCryptPasswordEncoder Spring Security не определяет - PullRequest
0 голосов
/ 09 ноября 2018

Здравствуйте, я разрабатываю приложение Spring Boot (v1.5.18.BUILD-SNAPSHOT), но это не удается, когда я пытаюсь запустить приложение ....

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 1 of constructor in com.eficacia.security.WebSecurity required a bean of type 'org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder' that could not be found.


Action:

Consider defining a bean of type 'org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder' in your configuration.

Проблема в том, что у меня настроен компонент:

@Configuration
public class AppConfiguration {

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

В моем pom.xml:

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-security</artifactId>
</dependency>

WebSecurity:

@Configuration
@EnableWebSecurity
@ComponentScan({"com.eficacia.security"})
public class WebSecurity extends WebSecurityConfigurerAdapter {

    public static final String USER_REGISTRATION_URL = "/v1/user";

    private UserDetailsService userDetailsService;

    private BCryptPasswordEncoder bCryptPasswordEncoder;

    public WebSecurity(UserDetailsService userDetailsService, BCryptPasswordEncoder bCryptPasswordEncoder) {
        this.userDetailsService = userDetailsService;
        this.bCryptPasswordEncoder = bCryptPasswordEncoder;
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors().and().csrf().disable()
        .authorizeRequests().antMatchers(HttpMethod.POST, USER_REGISTRATION_URL).permitAll()
        .anyRequest().authenticated()
        .and().addFilter(new JWTAuthenticationFilter(authenticationManager(), getApplicationContext()))
        .addFilter(new JWTAuthorizationFilter(authenticationManager(), getApplicationContext()))
        .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
    }

    @Override
    public void configure(AuthenticationManagerBuilder auth) throws Exception {

        auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder);
    }

    @Bean
    CorsConfigurationSource corsConfigurationSource() {
        CorsConfiguration configuration = new CorsConfiguration();
        //configuration.setAllowedOrigins(Arrays.asList("http://localhost:4200","http://opusclick.com","https://gateway2.tucompra.com.co"));
        configuration.addAllowedOrigin("*");
        configuration.addAllowedHeader("*");
        configuration.setAllowedMethods(Arrays.asList("GET","POST","PUT","PATCH","DELETE"));
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", configuration);
        return source;
    }

}

WebConfigurer:

@Configuration
public class WebMvcConfiguration extends WebMvcConfigurerAdapter {

    private final ApplicationContext applicationContext;
    private final EntityManager entityManager;

    @Autowired
    public WebMvcConfiguration(ApplicationContext applicationContext, EntityManager entityManager) {
        this.applicationContext = applicationContext;
        this.entityManager = entityManager;
    }

    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
        super.addArgumentResolvers(argumentResolvers);
        ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json().applicationContext(this.applicationContext).build();
        argumentResolvers.add(new DTOModelMapper(objectMapper, entityManager));
    }

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
            JacksonMapperConfiguration jacksonMapperConfiguration= new JacksonMapperConfiguration();
        converters.add(jacksonMapperConfiguration.mappingJackson2HttpMessageConverter());
        super.configureMessageConverters(converters);
    }
}

У меня очень простой вопрос, и поэтому определение класса 'org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder ' не найдено, если для этого действительно существует класс конфигурации.

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Вы создаете бин типа PasswordEncoder и пытаетесь автоматически связать BCryptPasswordEncoder

@Configuration
public class AppConfiguration {

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

Изменить это:

частный BCryptPasswordEncoder bCryptPasswordEncoder;

public WebSecurity(UserDetailsService userDetailsService, 
   BCryptPasswordEncoder bCryptPasswordEncoder) {
    this.userDetailsService = userDetailsService;
    this.bCryptPasswordEncoder = bCryptPasswordEncoder;
}

к этому: частный парольEncoder парольEncoder;

public WebSecurity(UserDetailsService userDetailsService, 
   PasswordEncoder passwordEncoder ) {
    this.userDetailsService = userDetailsService;
    this.passwordEncoder = PasswordEncoder ;
}

Spring could not found the BcryptPasswordEncoder type as you are returning PasswordEncoder
0 голосов
/ 09 ноября 2018

Похоже, ваш класс веб-конфигуратора отсутствует в пакете com.eficacia.security или в одном из его подпакетов.

Переместите WebMvcConfiguration в место внутри @ComponentScan ed пакетов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...