java - 使用 Spring 的 Java Configuration 时如何使用 Shiro.ini 配置 Shiro?

标签 java spring security shiro spring-java-config

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

相关文章:

java - 使用@Validated验证序列和短路

html - spring mvc资源无法访问或不工作

javascript - Handlebars 内联 onclick 安全吗?

Java语法数组

java - 相机应用程序将图像旋转 90 度

java - 用java写控制台输出

php - laravel 护照授权码 - 要求授予权限,有必要吗?

java - 如何向 roo-shell 中的实体添加字段?

java - Spring Boot @RequestBody 只解析 0/null 值?

c# - 如何在 .NET 应用程序中隐藏加密 key ?