Обычно я использую конфигурацию xml в своем проекте Spring в трех файлах:
applicationContext.xml: Этот файл содержит основную конфигурацию xml: сканирование компонентов, annotation-config, а такжевключает два других файла конфигурации xml:
applicationContext-db.xml Этот файл содержит все компоненты базы данных: dataSource, SessionFactory, ...
applicationContext-security.xml Этот файл содержит все настройки безопасности Spring.
Мне нужно использовать также Spring Security ACL, для этого я создал класс конфигурации:
AclMethodSecurityConfiguration.java
package com.medkhelifi.tutorials.todolist.conf;
/**
/* all imports goes here.
**/
@Configuration
@ImportResource({"classpath*:conf/applicationContext-db.xml"})
@EnableGlobalMethodSecurity (prePostEnabled = true, securedEnabled = true)
public class AclMethodSecurityConfiguration extends GlobalMethodSecurityConfiguration {
@Autowired
DataSource dataSource;
@Bean
public MethodSecurityExpressionHandler defaultMethodSecurityExpressionHandler() {
DefaultMethodSecurityExpressionHandler expressionHandler = new DefaultMethodSecurityExpressionHandler();
AclPermissionEvaluator permissionEvaluator = new AclPermissionEvaluator(aclService());
expressionHandler.setPermissionEvaluator(permissionEvaluator);
return expressionHandler;
}
@Bean
public JdbcMutableAclService aclService() {
return new JdbcMutableAclService(dataSource, lookupStrategy(), aclCache());
}
@Bean
public AclAuthorizationStrategy aclAuthorizationStrategy() {
return new AclAuthorizationStrategyImpl(new SimpleGrantedAuthority("ROLE_ADMIN"));
}
@Bean
public PermissionGrantingStrategy permissionGrantingStrategy() {
return new DefaultPermissionGrantingStrategy(new ConsoleAuditLogger());
}
@Bean
public EhCacheBasedAclCache aclCache() {
return new EhCacheBasedAclCache(
aclEhCacheFactoryBean().getObject(),
permissionGrantingStrategy(),
aclAuthorizationStrategy()
);
}
@Bean
public EhCacheFactoryBean aclEhCacheFactoryBean() {
EhCacheFactoryBean ehCacheFactoryBean = new EhCacheFactoryBean();
ehCacheFactoryBean.setCacheManager(aclCacheManager().getObject());
ehCacheFactoryBean.setCacheName("aclCache");
return ehCacheFactoryBean;
}
@Bean
public EhCacheManagerFactoryBean aclCacheManager() {
return new EhCacheManagerFactoryBean();
}
@Bean
public LookupStrategy lookupStrategy() {
return new BasicLookupStrategy(
dataSource,
aclCache(),
aclAuthorizationStrategy(),
new ConsoleAuditLogger());
}
}
Моя проблема в том, что источник данных, автоматически подключенный к файлу конфигурации, пуст, я не знаю, пропустил ли я что-то.
Все мои файлы XML находятся в каталоге: src / main /resources / conf /
В applicationContext-db.xml
<!-- DATASOURCE -->
<bean name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${database.driver}"/>
<property name="url" value="${database.url}"/>
<property name="username" value="${database.username}"/>
<property name="password" value="${database.password}"/>
</bean>
есть мое определение bean-компонента источника данных. Я уже использовал этот bean-компонент в определенном bean-компоненте Sessionfactory.В том же файле applicationContext-db.xml.
PS: Когда я удаляю расширенный класс GlobalMethodSecurityConfiguration
, мой источник данных определен, но мне нужен этот класс org.springframework.security.config.annotation.method.configuration
для настройки моего ACL Spring Securityконфигурации.