Не удалось выполнить автоматическую проводку. Не найдено компонентов типа ‘AuthenticationProvider’

#java #spring #spring-boot #kotlin #spring-security

#java #весна #весенняя загрузка #kotlin #spring-безопасность

Вопрос:

Я не могу автоматически подключить экземпляр Spring Framework AuthenticationProvider в моем классе SecurityConfig. Это странно, поскольку я включил необходимый импорт, и UserDetailsService (другой класс Spring Framework) может быть автоматически подключен без каких-либо проблем. Это мой код:

 import org.springframework.beans.factory.annotation.Autowired
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.security.authentication.AuthenticationProvider
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity
import org.springframework.security.config.annotation.web.builders.HttpSecurity
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter
import org.springframework.security.core.userdetails.UserDetailsService
import org.springframework.security.web.authentication.RememberMeServices
import org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices

@Configuration
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)
class SecurityConfig : WebSecurityConfigurerAdapter() {
    companion object {
        private const val REMEMBER_ME_KEY = "basdrwerdadev$#@safasfewrahl"
    }

    @Autowired private lateinit var authenticationProvider: AuthenticationProvider
    @Autowired private lateinit var userDetailsService: UserDetailsService
    ...
  

Может быть, мне не хватает зависимости? Я добавил зависимость безопасности Spring

Ответ №1:

Первые 2 вещи, которые я бы проверил:
i) является ли ваш пользовательский поставщик аутентификации аннотированным как сервис / компонент (т. Е. Может ли spring видеть и управлять им?)
ii) Расширяет ли он интерфейс AuthenticationManager spring?

Комментарии:

1. Мой поставщик аутентификации не является пользовательским. Я использую тот, который предоставлен Spring.

2. AuthenticationProvider от Spring — это интерфейс, предоставляемый Spring, который вы можете реализовать с помощью своей собственной пользовательской логики. Я бы попробовал изменить AuthenticationProvider на любую из различных реализаций, предоставляемых spring. Если это сработает, вы можете выбрать тот, который лучше всего подходит для вашего проекта, или даже реализовать интерфейс самостоятельно