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

3

我正在使用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;
}
}

如您所见,我正在尝试通过将其传递给 ShiroFilterFactoryBean.setFilterChainDefinitions()来加载 shiro.ini 。但是该方法仅加载 [urls] 部分的内容。因此, [main] 部分中的任何内容都不受影响。

那么,我应该在哪里使用完整的 shiro.ini 配置shiro呢?


1
请点击这里。您应该尝试将所有内容重构为Java配置,而不是使用.ini文件。 - Sotirios Delimanolis
1个回答

2

您可以尝试按照文档中的说明,从ini文件创建一个SecurityManager

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。您有更强大的工具可供选择。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接