【Shiro】5.多个Realm的使用和实现

news/2024/10/14 8:15:58

在Realm的使用中,可能使用多个Realm。比如,支持账号、密码登录;支持手机号验证码登录;支持微信登录等。

1. 创建多个自定义Realm

创建多个自定义的Realm,分别处理不同类型的认证和授权逻辑。

public class CustomRealm1 extends AuthorizingRealm {@Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {// 实现Realm1的授权逻辑
    }@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {// 实现Realm1的认证逻辑
    }
}public class CustomRealm2 extends AuthorizingRealm {@Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {// 实现Realm2的授权逻辑
    }@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {// 实现Realm2的认证逻辑
    }
}

2. 配置Shiro

在Shiro配置类中配置多个Realm,并指定认证策略。

 1 @Configuration
 2 public class ShiroConfig {
 3 
 4     @Bean
 5     public SecurityManager securityManager(CustomRealm1 customRealm1, CustomRealm2 customRealm2) {
 6         DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
 7         List<Realm> realms = new ArrayList<>();
 8         realms.add(customRealm1);
 9         realms.add(customRealm2);
10         securityManager.setRealms(realms);
11 
12         // 设置认证策略,这里使用AtLeastOneSuccessfulStrategy,只要一个Realm验证成功即可
13         ModularityRealmAuthenticator authenticator = new ModularityRealmAuthenticator();
14         authenticator.setAuthenticationStrategy(new AtLeastOneSuccessfulStrategy());
15         securityManager.setAuthenticator(authenticator);
16 
17         return securityManager;
18     }
19 
20     @Bean
21     public CustomRealm1 customRealm1() {
22         return new CustomRealm1();
23     }
24 
25     @Bean
26     public CustomRealm2 customRealm2() {
27         return new CustomRealm2();
28     }
29 }

在上述代码中,创建了两个自定义的Realm:CustomRealm1和CustomRealm2,并在Shiro配置类中配置了这两个Realm。通过设置SecurityManager的Realms属性,可以指定多个Realm来处理认证和授权操作。同时,还设置了认证策略为AtLeastOneSuccessfulStrategy,表示只要一个Realm验证成功即可认证通过。
认证策略包括3种:

认证方式 描述
AtLeastOneSuccessfulStrategy
只要有一个Realm认证成功,那么认证将视为成功
FirstSuccessfulStrategy
第一个Realm认证成功,整体认证将视为成功,且后续ReaLm被忽略
AllSuccessfulStrategy
所有Realm成功,认证视为成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/71309.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Burp Suite Professional 2024.9 发布下载,新增功能概览

Burp Suite Professional 2024.9 (macOS, Linux, Windows) - Web 应用安全、测试和扫描Burp Suite Professional 2024.9 (macOS, Linux, Windows) - Web 应用安全、测试和扫描 Burp Suite Professional, Test, find, and exploit vulnerabilities. 请访问原文链接:https://sys…

C#/.NET/.NET Core技术前沿周刊 | 第 9 期(2024年10.07-10.13)

前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。欢迎投稿、推荐或自荐优质文章、项目、学习资源等…

再见,数据中台,理想还在路上

近日,Gartner发布了24年《中国数据分析及人工智能成熟度周期报告》,在成熟度曲线中声明“数据中台”已被淘汰。数据中台,这个曾被奉若圭臬,视为先进架构的标志性建筑,将就此将淡出历史舞台。 有些东西,在它真正消亡前,就已经被遗忘。 其实,早在几年前,国内技术圈已经…

超级干货:Air780E之RS485通信篇,你学会了吗?

​ 今天,我们来学习低功耗4G模组Air780E的RS485通信,同学们,你学习了吗? 一、RS485简介 物联网(IoT)在工业场景中的应用越来越广泛,而RS485是一种常见的通信协议,广泛应用于工业自动化和物联网系统中。 RS485是一种串行通信标准,主要用于长距离、多节点通信。适用于工…

远程升级频频失败?原因竟然是…

​最近有客户反馈在乡村里频繁出现掉线的情况。 赶紧排查原因! 通过换货、换SIM卡对比排查测试,发现只有去年采购的那批模块在客户环境附近会出现掉线的情况,而今年采购的模块批次就不会掉线。。。 继续追究原因,联系对应的销售工作人员,了解到差异就是模块内的固件版本不…

时间函数:与时间相关那些事。。。

​ 在LuatOS中,获取时间函数用得最多的就是os.time()函数。 应很多同学要求,今天,我会讲一些与这个函数以及其他时间函数相关的知识。 一、时间戳相关 os.time()这个函数,只能获取当前时间戳;如果客户希望获取的是当前时间,即相应的年月日时分秒,可以使用os.date()函数。…

异常重启怎么破?多方排查后,原因竟然是。。。

​ 又是异常重启。。。让人摸不到头脑。 这几天,看到客户上报了重启问题,说是查不出原因。 重启现象是——有极个别设备在工作中不定时反复异常重启,大部分设备正常;反复重启设备,有时候又能持续正常工作。 沟通中很明显感觉到了客户的着急和无奈,必须找出背后原因,解决…

超实用!阿里云应用——Air780EP低功耗4G模组AT开发示例

​ Air780EP是合宙推出的一款低功耗4G全网通模组,兼容模组行业1618经典封装,支持OpenCPU开发及全功能数传AT开发,可广泛应用于多样化的物联网终端。 针对客户朋友需求反馈,本期特别推出基于Air780EP模组AT开发的阿里云应用指南。 一、相关准备工作 ​1.1 硬件准备合宙Air78…