我正在使用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?
答案 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
。你可以使用更强大的工具。