PersistenceConfig.java
package pk.lucidxpo.ynami.spring;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.domain.AuditorAware;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import pk.lucidxpo.ynami.spring.features.FeatureProxyFactoryBeanWrapper;
import pk.lucidxpo.ynami.spring.security.SpringSecurityAuditAwareImpl;
import static pk.lucidxpo.ynami.spring.features.FeatureToggles.WEB_SECURITY;
@Configuration
@EnableJpaAuditing
@EnableTransactionManagement
public class PersistenceConfig {
static final String AUDITOR_AWARE_BEAN_NAME = "auditorAware";
@Bean
@ConditionalOnProperty(name = "config.togglz.enabled", havingValue = "true")
public AuditorAware<String> insecureAuditorAware() {
return new AuditorAwareImpl();
}
@Bean
@ConditionalOnProperty(name = "config.togglz.enabled", havingValue = "true")
public AuditorAware<String> springSecurityAuditorAware() {
return new SpringSecurityAuditAwareImpl();
}
@Bean
@ConditionalOnProperty(name = "config.togglz.enabled", havingValue = "true")
public FeatureProxyFactoryBeanWrapper proxiedAuditorAware() {
final FeatureProxyFactoryBeanWrapper proxyFactoryBean = new FeatureProxyFactoryBeanWrapper();
proxyFactoryBean.setFeature(WEB_SECURITY);
proxyFactoryBean.setProxyType(AuditorAware.class);
proxyFactoryBean.setActive(springSecurityAuditorAware());
proxyFactoryBean.setInactive(insecureAuditorAware());
return proxyFactoryBean;
}
@Primary
@Bean(AUDITOR_AWARE_BEAN_NAME)
@ConditionalOnProperty(name = "config.togglz.enabled", havingValue = "true")
public AuditorAware auditorAware(@Autowired @Qualifier("proxiedAuditorAware") final FeatureProxyFactoryBeanWrapper proxiedAuditorAware) throws Exception {
return (AuditorAware) proxiedAuditorAware.getObject();
}
@Bean(AUDITOR_AWARE_BEAN_NAME)
@ConditionalOnProperty(name = "config.togglz.enabled", havingValue = "false", matchIfMissing = true)
public AuditorAware auditorAwareWhenTogglzIsDisabled() {
return new AuditorAwareImpl();
}
}