我将 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?
最佳答案
你可以试试documentation说并从 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
。您可以使用更强大的工具。
关于java - 使用 Spring 的 Java Configuration 时如何使用 Shiro.ini 配置 Shiro?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20626520/