#java #spring #spring-boot
#java #spring #spring-boot
Вопрос:
У меня странная проблема, я пытаюсь интегрировать пользовательскую библиотеку, которая определяет несколько компонентов, которые должны быть прочитаны основным классом приложения spring boot.
Ниже приведен фрагмент кода моего основного класса.
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "application.frameworks")
@EnableCaching
@EnableAsync
@EnableWebMvc
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true)
@SpringBootApplication
@ComponentScan(basePackages = {"com.abc.order.sample"
, "com.abc.alberta.logging"
, "com.abc.enterprise"
, "com.abc.platformservices.connectors.oracle"
, "com.abc.order.emailframework"})
@EntityScan(basePackages = {"com.abc.order.sample.domain.model.entity",
"com.abc.order.emailframework.domains"})
@EnableJpaRepositories(basePackages = {"com.abc.order.sample.repository", "com.abc.order.emailframework.repositories"})
@Slf4j
public class TestApplication implements CommandLineRunner {
Как вы можете видеть, я определил все возможные аннотации только из-за разочарования в основном классе, поскольку он не создает компонент, определенный в классе конфигурации, как показано ниже. (Это добавляется как зависимость в текущий проект с использованием maven dependency — Другие вещи опущены.)
@Slf4j
@ConditionalOnProperty(prefix = "config.framework", name = "security.enabled", matchIfMissing = true)
@Configuration
@EnableScheduling
@EnableConfigurationProperties({ApplicationProperties.class, SSLProperties.class, SecurityPolicyProperties.class})
public class SecurityConfiguration {
@Bean
@ConditionalOnWebApplication
public ServletSecurityInterceptor springBootInterceptor() throws PolicyAdminServiceConfigurationException {
CertificatePropertyContext samlCertificatePropertyContext = new CertificatePropertyContext(
sslProperties.getTrustStoreType(), sslProperties.getTrustStoreClean(),
sslProperties.getTrustStorePassword(), sslProperties.getTrustStoreCryptovaultLabel());
return new SpringBootSecurityInterceptor(remoteSynchonizer(), applicationProperties.getNamespace(), applicationProperties.getName(), samlCertificatePropertyContext, subjectHelper);
}
}
Свойства, определенные в основном проекте, такие, как показано ниже
server:
port: 8080
ssl:
enabled: true
client-auth: none
trust-store: C:sample-appsrcmainresourcestruststore.jks
trust-store-password: changeit
key-store: C:sample-appsrcmainresourceskeystore.jks
key-store-password: changeit
client-alias: client-common
config:
frameworks:
namespace: com.abc.sampleApp
name: sample-app
security:
token:
host: abc.deployment.int
policy:
endpoint: abc.deployment.int
enabled: true
Интересно, почему это не работает при добавлении того же в другие приложения только с аннотацией @SpringBootApplication, она работает безупречно. Я что-то пропустил здесь со стороны spring в конфигурации?
ОБНОВЛЕНИЕ com.abc.enterprise — содержит SecurityConfiguration (как часть зависимости maven) com.abc.order.sample — содержит тестовое приложение (как часть самого приложения)
Комментарии:
1. В какие пакеты
SecurityConfiguration
иTestApplication
классы помещены?2. попробуйте изменить настройку на
@ConditionalOnProperty(name = "config.framework.security.enabled", havingValue = "true", matchIfMissing = true)
3.
@ConditionalOnWebApplication
действительно ли это требуется здесь вообще?4. Я не уверен в этом @Andrey
5. Я не могу вносить изменения в эти файлы — это файлы библиотеки. (банки включены из зависимости maven)