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