На сервере ресурсов SpringBoot 3 OAuth2 отсутствует компонент типа «org.springframework.security.oauth2.jwt.JwtDecoder»
Я создал приложение с Spring-boot-starter-oauth2-resource-server в pom.xml и значением для Spring.security.oauth2.resourceserver.jwt.issuer-uri в application.properties . Он работает нормально, когда я запускаю его в первый раз. Затем я добавил класс @Service с внедренным org.springframework.security.oauth2.jwt.JwtDecoder, как показано ниже.
@Slf4j
@Service
public class MyService {
private final JwtDecoder jwtDecoder;
private final WebClient webClient;
public MyService(
JwtDecoder jwtDecoder,
WebClient webClient
) {
this.jwtDecoder = jwtDecoder;
this.webClient = webClient;
}
// method definitions
}
При запуске выдает ошибку
Параметр 0 конструктора в MyService требовал bean-компонента типа org.springframework.security.oauth2.jwt.JwtDecoder, который не удалось найти.
Когда я удаляю инъекцию, все снова работает нормально.
Что я должен делать?
2 ответа
В отдельном классе конфигурации вам, возможно, придется добавить bean-компонент для декодера jwt следующим образом:
@Bean
public JwtDecoder jwtDecoder(OAuth2ResourceServerProperties properties) {
return JwtDecoders.fromIssuerLocation(properties.getJwt().getIssuerUri());
}
Импорт свойств будет следующим:
import org.springframework.boot.autoconfigure.security.oauth2.resource.OAuth2ResourceServerProperties;
Где находится фактическое внедрение зависимостей? и где он пытается получить значение из свойств вашего приложения? или вы рассчитываете на автонастройку? пожалуйста, покажите весь поток вашего кода, похоже, что какой-то его части не хватает. Как Spring boot узнает, откуда взять декодер? вам следует убедиться, что соответствующий bean-компонент доступен в контексте приложения, а затем использовать аннотацию @Autowired или использовать @RequiredArgsConstructor, поскольку вы используете lombok.