package org.ohdsi.webapi;
import java.util.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.shiro.realm.Realm;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.ohdsi.webapi.shiro.management.AtlasSecurity;
import org.ohdsi.webapi.shiro.management.DisabledSecurity;
import org.ohdsi.webapi.shiro.management.Security;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Created by GMalikov on 20.08.2015.
*/
@Configuration
public class ShiroConfiguration {
private static final Log log = LogFactory.getLog(ShiroConfiguration.class);
@Value("${security.enabled}")
private boolean enabled;
@Bean
public Security security() {
if (enabled) {
log.debug("AtlasSecurity module loaded");
return new AtlasSecurity();
}
else {
log.debug("DisabledSecurity module loaded");
return new DisabledSecurity();
}
};
@Bean
public ShiroFilterFactoryBean shiroFilter(Security security){
ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean();
shiroFilter.setSecurityManager(securityManager(security));
shiroFilter.setFilters(security.getFilters());
shiroFilter.setFilterChainDefinitionMap(security.getFilterChain());
return shiroFilter;
}
@Bean
public DefaultWebSecurityManager securityManager(Security security){
final DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setAuthenticator(security.getAuthenticator());
Set<Realm> realms = security.getRealms();
if (realms != null && !realms.isEmpty())
securityManager.setRealms(realms);
return securityManager;
}
}