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;
}
}

如您所见,我试图shiro.ini通过将其传递给ShiroFilterFactoryBean.setFilterChainDefinitions().

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

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

4

1 回答 1

2

您可以尝试文档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

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

于 2013-12-17T05:29:55.657 回答