【问题标题】:How to configure Shiro with Shiro.ini when using Spring's Java Configuration?使用 Spring 的 Java 配置时如何使用 Shiro.ini 配置 Shiro?
【发布时间】:2014-01-04 18:21:00
【问题描述】:

我将 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?

【问题讨论】:

  • 看看here。您应该尝试将所有内容重构为 Java 配置,而不是使用 .ini 文件。

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


【解决方案1】:

您可以尝试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。您可以使用更强大的工具。

【讨论】:

    猜你喜欢
    • 2014-10-04
    • 1970-01-01
    • 2017-09-04
    • 2011-11-18
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    • 2019-07-10
    • 2014-04-14
    相关资源
    最近更新 更多