В приложении весенней загрузки, которое реагирует и использует jwt, в моем Spring-Cloud-Gateway у меня есть этот код.
@EnableDiscoveryClient
@SpringBootApplication
public class GatewayServiceApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayServiceApplication.class, args);
}
}
@Configuration
@EnableWebFluxSecurity
@EnableReactiveMethodSecurity
public class SpringSecurityWebFluxConfig {
private final UserServiceImpl userService;
private final JwtTokenUtil tokenUtil;
private static final String[] AUTH_WHITELIST = {
"/resources/**",
"/webjars/**",
"/authorize/**",
"/favicon.ico"};
public SpringSecurityWebFluxConfig(JwtTokenUtil tokenUtil, UserServiceImpl userService) {
this.tokenUtil = tokenUtil;
this.userService = userService;
}
..
}
@Service
public class UserServiceImpl implements ReactiveUserDetailsService, UserService {
private final UserRepository userRepository;
public UserServiceImpl(final UserRepository userRepository) {
this.userRepository = userRepository;
}
...
}
@Repository
public interface UserRepository extends ReactiveCrudRepository<User, Integer>{
}
public class JWTHeadersExchangeMatcher implements ServerWebExchangeMatcher {
@Override
public Mono<MatchResult> matches(final ServerWebExchange exchange) {
}
}
public class JWTReactiveAuthenticationManager implements ReactiveAuthenticationManager {
...
public JWTReactiveAuthenticationManager(final PasswordEncoder passwordEncoder, final UserServiceImpl userService) {
this.passwordEncoder = passwordEncoder;
this.userService = userService;
}
}
public class JwtTokenUtil {
...
}
public class TokenAuthenticationConverter implements Function<ServerWebExchange, Mono<Authentication>> {
private final JwtTokenUtil tokenProvider;
public TokenAuthenticationConverter(JwtTokenUtil tokenProvider) {
this.tokenProvider = tokenProvider;
}
}
public class TokenAuthenticationConverter implements Function<ServerWebExchange, Mono<Authentication>> {
private final JwtTokenUtil tokenProvider;
public TokenAuthenticationConverter(JwtTokenUtil tokenProvider) {
this.tokenProvider = tokenProvider;
}
}
- [main] onfigReactiveWebServerApplicationContext: во время инициализации контекста обнаружено исключение - отмена
попытка обновления:
org.springframework.beans.factory.UnsatisfiedDependencyException:
Ошибка создания бина с именем 'springSecurityWebFluxConfig', определенного в
файл
[/Home/mac/Development/project/reactive-cloud/gateway-service/build/classes/java/main/com/example/gatewayservice/config/SpringSecurityWebFluxConfig.class]:
Неудовлетворенная зависимость выражается через параметр конструктора 1;
вложенное исключение
org.springframework.beans.factory.UnsatisfiedDependencyException:
Ошибка создания бина с именем 'userServiceImpl', определенным в файле
[/Home/mac/Development/project/reactive-cloud/gateway-service/build/classes/java/main/com/example/gatewayservice/service/UserServiceImpl.class]:
Неудовлетворенная зависимость выражается через параметр конструктора 0;
вложенное исключение
org.springframework.beans.factory.NoSuchBeanDefinitionException: нет
квалифицирующий боб типа
'com.example.gatewayservice.repository.UserRepository' доступно:
ожидается, по крайней мере, 1 боб, который считается кандидатом autowire.
Аннотации зависимостей: {} 2019-06-27 11: 47: 23.336 INFO 53073 --- [
main] ConditionEvaluationReportLoggingListener:
Пытался поставить автонастройку
в UserServiceImpl в классе SpringSecurityWebFluxConfig
в UserRepository в классе UserServiceImpl
на UserServiceImpl в JWTReactiveAuthenticationManager.class
но получите ту же ошибку
Редактировать
если я использую
@ EnableR2dbcRepositories для GatewayServiceApplication, у меня нет этой ошибки, но она ищет DatabaseClient