将多个 Shiro Realms 集成到 Spring Boot 环境中 Java

Posted

技术标签:

【中文标题】将多个 Shiro Realms 集成到 Spring Boot 环境中 Java【英文标题】:Integrate Multiple Shiro Realms into a Spring Boot environment Java 【发布时间】:2017-10-26 23:40:44 【问题描述】:

我有一个基于 xml 的 Apache Shiro SecurityManager 和几个自定义领域(它们扩展了领域中的构建)。我正在尝试迁移到 Spring Boot,它主要是基于注释的。

我想轻松地将所有领域配置到安全管理器中。目前,我可以通过创建 ShiroConfig.java(由 @Configuration 注释),在 ShiroConfig 中手动创建每个领域的对象并将其添加到下DefaultWebSecurityManager.setRealms(Collection)。

有没有其他方法,通过注解可以实现同样的事情,我对每个 Realm 进行注解,说它是一个领域,并且它们都将在运行时添加到安全管理器下?

当前xml配置

<bean id="securityManager" class="com.abc.xyz.SecurityManager"> <property name="realms"> <set> <ref component-id="Realm_1”/> <ref component-id="Realm_2” /> <ref component-id="Realm_3” /> <ref component-id="Realm_4” /> </set> </property> </bean> <bean id="Realm_1" class="com.abc.xyz.Realm_1”> </bean> <bean id="Realm_2" class="com.abc.xyz.Realm_2”> </bean> <bean id="Realm_3” class="com.abc.xyz.Realm_3”> </bean> <bean id="Realm_4” class="com.abc.xyz.Realm_4”> </bean>

当前的 Spring 引导代码 [我不想为每个领域重复]

@Bean(name="securityManager")

public DefaultWebSecurityManager securityManager() 
    DefaultWebSecurityManager manager = new DefaultWebSecurityManager();
    manager.setRealm(userRealm());
    manager.setSessionManager(defaultWebSessionManager());
    return manager;

@豆 @DependsOn(value="lifecycleBeanPostProcessor")

public Realm_1 userRealm() 
    Realm_1 userRealm = new Realm_1();
    return userRealm;

【问题讨论】:

【参考方案1】:

Shiro 1.4 即将推出,我们正在努力更新网站。但是看看例子,你可以在 Spring 和 Spring-Boot 中注入你的领域。

https://github.com/apache/shiro/blob/master/support/spring/src/main/java/org/apache/shiro/spring/config/ShiroConfiguration.java#L44-L48

https://github.com/apache/shiro/blob/master/samples/spring/src/main/java/org/apache/shiro/samples/spring/CliApp.java#L46-L56

【讨论】:

感谢您的回复,但是我的问题更多的是,如果我有 4 个领域,可以通过一些注释将它们注入到安全管理器中,而不是我手动创建领域列表并传递到安全管理器,在您的第一个 ShiroConfiguratin.java 文件中作为以下代码 sn-p `@Bean @ Override protected SessionsSecurityManager securityManager(List realms) return super.securityManager(realms); ` 您应该能够像公开任何其他 Spring bean 一样公开您的 bean。

以上是关于将多个 Shiro Realms 集成到 Spring Boot 环境中 Java的主要内容,如果未能解决你的问题,请参考以下文章

webapp的Apache Shiro授权和身份验证配置

Shiro 架构

shiro#springboot

shiro

Shiro框架学习

Apache-Shiro