使用Spring的Java配置时如何使用Shiro.ini配置Shiro?

时间:2013-12-17 05:23:27

标签: java spring security shiro spring-java-config

我正在使用Apache Shiro和Spring并仅使用Spring的Java配置。 (没有xml)。 下面是我的配置类的一部分:

@Configuration
public class AppConfig {

@Bean
public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
    return new LifecycleBeanPostProcessor();
}

@Bean
public ShiroFilterFactoryBean shiroFilter(DefaultWebSecurityManager securityManager) {
    ShiroFilterFactoryBean factoryBean = new ShiroFilterFactoryBean();
    factoryBean.setSecurityManager(securityManager);

    String shiroIniContents = readFile(new ClassPathResource("shiro.ini").getFile().toPath());
    factoryBean.setFilterChainDefinitions(shiroIniContents);//only reads the [urls] section

    factoryBean.setLoginUrl("/rest/login");

    return factoryBean;
}


@Bean
public DefaultWebSecurityManager securityManager()  {
    DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
    securityManager.setRealm(stormpathRealm());
    return securityManager;
}
}

如您所见,我正在尝试将shiro.ini传递给ShiroFilterFactoryBean.setFilterChainDefinitions()

但该方法仅加载[urls]部分的内容。因此,[main]部分中的所有内容都保持不变。

那么,我如何/在哪里使用shiro.ini的全部内容配置shiro?

1 个答案:

答案 0 :(得分:2)

您可以尝试documentation所说的内容并从SecurityManager文件中创建ini

Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
SecurityManager securityManager = factory.getInstance();

和您的@Bean方法

ShiroFilterFactoryBean factoryBean = new ShiroFilterFactoryBean();
factoryBean.setSecurityManager(securityManager); // referring to previous

如果您需要进一步配置,则需要将securityManager转换为DefaultSecurityManager

使用Spring时,你真的不应该使用shiro.ini。你可以使用更强大的工具。