shiro多realm配置(可区分不同类型用户)

[Shiro]多Realm时,指定登录Realm [Shiro]多Realm时,指定登录Realm 之前写过多Realm登录前后台区分问题,实现了当时的需求,可是再下一步的时候,角色与权限校验会失效。为了满足当时的项目需求,又拓展了鉴权源,以及若干功能类。在本人看来,这种方式很Low,玷污了Shiro。 现在有一个较好的方式去实现前后台的认证与鉴权。通过自定义Token类来达到鉴别目的。 Token的介绍Shiro使用Token作为认证的 阅读详情

由于项目中需要用到shiro,但是用户来自不同的三张表,需要根据token判断不同类型的用户,但是shiro得token不支持带类型的参数,所以需要重写token及认证器

1.自定义token

/**
 * 自定义带用户类型token
 * @author Sunny
 */
public class UsernamePasswordByUserTypeToken extends UsernamePasswordToken {
	private static final long serialVersionUID = -7638434498222500528L;

	/*
	 * 用户类型
	 * 1:积分后台用户(后台管理员)
	 * 2:积分兑换端用户(店长店员)
	 * 3:积分验证端用户(第三方合作店铺)
	 */
	private String userType;

	public String getUserType() {
		return userType;
	}

	public void setUserType(String userType) {
		this.userType = userType;
	}

	public UsernamePasswordByUserTypeToken(String username, String password, String userType) {
		super(username, password);
		this.userType = userType;
	}
}

2.自定义认证器

/**
 * 自定义认证器
 * 
 * @author Sunny
 */
public class PointRealmAuthenticator extends ModularRealmAuthenticator {
	/**
	 * 存放realm
	 */
	private Map<String, Object> definedRealms;

	public void setDefinedRealms(Map<String, Object> definedRealms) {
		this.definedRealms = definedRealms;
	}

	/**
	 * 根据用户类型判断使用哪个Realm
	 */
	@Override
	protected AuthenticationInfo doAuthenticate(AuthenticationToken authenticationToken)
			throws AuthenticationException {
		super.assertRealmsConfigured();
		Realm realm = null;
		// 使用自定义Token
		UsernamePasswordByUserTypeToken token = (UsernamePasswordByUserTypeToken) authenticationToken;
		// 判断用户类型
		if ("1".equals(token.getUserType())) {
			realm = (Realm) this.definedRealms.get("pointSysShiroDbRealm");
		} else if ("2".equals(token.getUserType())) {
			realm = (Realm) this.definedRealms.get("pointExchangeShiroDbRealm");
		} else if ("3".equals(token.getUserType())) {
			realm = (Realm) this.definedRealms.get("pointValidShiroDbRealm");
		}
		return this.doSingleRealmAuthentication(realm, authenticationToken);
	}
}

3.配置shiro xml文件

<!-- 配置 Shiro 的 SecurityManager 实例 -->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
	<property name="authenticator" ref="pointRealmAuthenticator" />
	<!-- 单Realm配置废弃 -->
	<!-- <property name="realm" ref="shiroDbRealm" /> -->
	<!-- 多Realm注入 -->
	<property name="realms">
		<list>
			<ref bean="pointSysShiroDbRealm" />
			<ref bean="pointExchangeShiroDbRealm" />
			<ref bean="pointValidShiroDbRealm" />
		</list>
	</property>
	<property name="cacheManager" ref="shiroEhcacheManager" />
</bean>

<!-- 项目自定义Authenticator -->
<bean id="pointRealmAuthenticator"
	class="org.zmshop.common.shiro.authenticator.PointRealmAuthenticator">
	<!-- realmMap -->
	<property name="definedRealms">
		<map>
			<entry key="pointSysShiroDbRealm" value-ref="pointSysShiroDbRealm" />
			<entry key="pointExchangeShiroDbRealm" value-ref="pointExchangeShiroDbRealm" />
			<entry key="pointValidShiroDbRealm" value-ref="pointValidShiroDbRealm" />
		</map>
	</property>
</bean>

<!-- 项目自定义的Realm -->
<!-- 积分后台用户(后台管理员)Realm -->
<bean id="pointSysShiroDbRealm" class="org.zmshop.common.shiro.realm.PointSysShiroDbRealm">
	<property name="maUserService" ref="maUserServiceImpl" />
	<property name="baUserGradeService" ref="baUserGradeServiceImpl" />
</bean>
<!-- 积分兑换端用户(店长店员)Realm -->
<bean id="pointExchangeShiroDbRealm" class="org.zmshop.common.shiro.realm.PointExchangeShiroDbRealm">
	<property name="baUserService" ref="baUserServiceImpl" />
	<property name="baUserSubService" ref="baUserSubServiceImpl" />
	<property name="stClerkService" ref="stClerkServiceImpl" />
	<property name="baUserGradeService" ref="baUserGradeServiceImpl" />
	<property name="stMainService" ref="stMainServiceImpl" />
</bean>
<!-- 积分验证端用户(第三方合作店铺)Realm -->
<bean id="pointValidShiroDbRealm" class="org.zmshop.common.shiro.realm.PointValidShiroDbRealm">
	<property name="ebtPointEmployeeService" ref="ebtPointEmployeeServiceImpl" />
	<property name="baUserGradeService" ref="baUserGradeServiceImpl" />
</bean>
4.Realm文件需注意事项
public class PointExchangeShiroDbRealm extends AuthorizingRealm {
	/**
	 * 身份验证回调函数,登录时调用
	 */
	@Override
	protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken)
			throws AuthenticationException {
		//具体登录判断逻辑
		return xxx;
	}

	/**
	 * 授权查询回调函数,进行鉴权但缓存中无用户的授权信息时调用
	 * 多realm该方法会在多个realm之间调用,所以需要判断当前用户是否是当前类中的shirouser对象[其他realm一样]
	 */
	@Override
	protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
		// 判断是否是当前用户登录的对象
		if (principals == null || !(principals.getPrimaryPrincipal() instanceof ShiroUser)) {
			return null;
		}
		return xxx;
	}

	/**
	 * 自定义Authentication对象,使得Subject除了携带用户的登录名外还可以携带更多信息.
	 */
	public class ShiroUser implements Serializable {
		private static final long serialVersionUID = 7240137316895366700L;
	}
}

Shiro基本使用详解以及多Realm使用和配置.rar Shiro基本使用详解以及多Realm使用和配置,拿来可以直接使用,也可以在此基础上进行自己业务逻辑的添加和修改,如果希望进一步深入学习,可以查看我的博客,可以查看https://blog.csdn.net/u014748504/article/details/107813181,或给我留言 立即下载

相关推荐

shiro获取登录状态和用户信息

shiro根据session获取登录状态和用户信息

Springboot 配置Shiro实现多realm不同数据表多用户类型登陆、鉴权

原文参考转载自:https://www.cnblogs.com/skyLogin/p/10871347.html --------------------------- 本文根据原文内容,结合自身实际配置步骤进行编写。 ---------------------------- 场景: 最近做项目时,多个项目需要用到shiro多用户类型登录,每个角色都在自己独立的库表中,以前...

_修铁路的、的博客 7386

YOLOv8_obb的C++工程部署实战:从模型转换到实时视频推理

本文详细介绍了YOLOv8_obb模型在C++环境下的完整工程部署流程,涵盖从PyTorch模型到ONNX格式的转换、基于ONNX Runtime的C++推理引擎搭建、旋转框后处理解析,以及实时视频流处理与性能优化。文章重点解析了模型转换的关键参数、环境配置的常见问题、核心推理代码的实现,并提供了实用的避坑指南,旨在帮助开发者高效完成YOLOv8_obb的C++工程部署。

weixin_29100927的博客 45

Springboot2集成Shiro框架(九)配置多个realm

目录

New_Yao的博客 3603

机器学习预测土壤养分:从电导率、pH到随机森林与神经网络的农业实践

在智慧农业与精准农业领域,机器学习已成为处理复杂农业数据、挖掘潜在规律的关键技术。其核心原理在于通过算法从多维数据中自动学习特征与目标变量之间的映射关系,尤其擅长捕捉非线性关联。这项技术的核心价值在于能够将传统上依赖昂贵、耗时实验室分析的问题(如土壤养分检测),转化为基于易获取传感器数据(如电导率、pH值)的快速、低成本预测任务,为农业生产的实时决策与资源优化提供了全新可能。其典型应用场景包括作物生长监测、产量预测以及精准施肥管理等。本文聚焦于利用随机森林和神经网络等回归算法,构建通过土壤物理参数预测氮磷钾

weixin_33693070的博客 665

联想服务器ThinkSystemRAID阵列设置教程

关注我不迷路,全是干货! 以联想ThinkSystemSR530为例子进行示范。 开机点按【F1】 点击——【UEFI设置】 依次点击——【系统设置】——【存储】 点击——【RAID卡】 PS:本次服务器配置的是730-8i 阵列卡,按实际情况选中需要设置的阵列卡即可。 点击——【Main Menu】 点击——【Configuration Management】 点击——【Create Virtual Drive】 点击——【Select RAID Leve..

littlelotusK的博客 2万+

SpringBoot 与Shiro 多realm实现多realm不同数据表用户登录认证和权限管理的方法,以及出现的错误

在本次编写学生宿舍管理系统时,在实现shiro对不同的表进行登录认证与权限管理的时候,出现错误。 首先,我们要知道的是shiro与spring整合配置两个realm时,两个realm返回了不同的AuthenticationInfo,但PrincipalCollection只包含一个principal。 这个时候,如果你依然使用单个realm的话,是无论无何也无法实现对两张表的操作的。 通过查看相关的源码 以及他人的经验,最终得以解决。 这里我推荐一篇博客SpringBoot 与Shiro 整合系列(四)多r

三横同学的博客 997

FPGA可重构技术

介绍FPGA 可重构技术的实现方法,包括全局重构和部分重构

航天领域资深码农,型号经验丰富,一线干货分享 1989

SpringBoot 与Shiro 整合系列(四)多realm延伸之实现多realm不同数据表用户登录认证和鉴权

shiro是一个很好的登陆以及权限管理框架,但是默认是单realm单数据表,如果业务中用户分布在不同的数据表,单realm就很难实现登陆以及权限管理的功能,这篇博客就简单的介绍一个客户和系统管理员账号分布在不同的数据表情况下,shiro的多realm登陆验证,使用springboot,mybatis mysql等相关技术,博客底部附上源码,有兴趣的可以去下载 ...

12程序猿的博客 1158

STM32F103 超声波风速风向仪实战:0.1m/s精度风洞标定与OLED显示(附源码)

本文详细介绍了基于STM32F103的超声波风速风向仪设计与实现,通过超声波时间差测量技术实现0.1m/s高精度测量。文章涵盖硬件设计、算法实现、风洞标定及OLED显示等关键环节,提供完整源码,适用于气象监测、风力发电等领域。

weixin_42532938的博客 275

工业机器人抓取目标检测与抓取姿态估计系统:基于YOLOv12与Cornell Grasping Dataset

工业机器人抓取是自动化生产中的核心环节,而精确的目标检测和抓取姿态估计是实现高效抓取的关键。本文将详细介绍如何构建一个完整的工业机器人抓取系统,该系统结合了最新的YOLOv12目标检测算法和Cornell Grasping Dataset的抓取姿态估计,并提供了用户友好的UI界面。本文详细介绍了一个完整的工业机器人抓取系统,该系统结合了YOLOv12目标检测和基于Cornell Grasping Dataset的抓取姿态估计。我们将使用PyQt5构建一个用户友好的界面,集成目标检测和抓取姿态估计功能。

YOLO 574

SpringBoot整合Shiro多realm登录配置,另外附俩个教程

SpringBoot整合Shiro,通过用户、角色、权限三者关联实现权限管理 本篇文章主要介绍 Shiro 多 realm,根据不同的登录类型指定不同的 realm。 所谓免密登录,就是区别正常的密码登录。比如,我现在要实现第三方登录,当验证了是李四,现在要让他通过 shiro 的 subject.login(),但是不知道他的密码(密码加密了),我们不能拿数据库里的密码去登录,除非重新写 Rea...

qq_35238997的博客 2449

iStoreOS等软路由插件卸载的残留?分享一款软路由高级卸载工具,自定义卸载,轻松解决卸载残留问题

iStoreOS用户看过来!👀 还在被插件包残留困扰吗?本文分享一款“高级卸载”的插件,助你深度清理iStoreOS系统,彻底解决软件卸载不净的痛点,告别频繁恢复出厂设置的烦恼!🚀

XiaoqiangClub的博客 1541

shiro框架多realm登录认证配置

我们做shiro框架经常会遇到这种情况,用户数量很多,又不在同一个表里,比如管理员一个表,用户一个表,商家一个表。这时我们就需要用到多realm来配置让他们用不同得realm来进行登录

秋雨 De Blog 1537

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Shiro系列(二)——Shiro 多 Realm 实现

写在前面 本文基于上一篇文章《 Shiro + Springboot + JWT 的整合》延续,示例项目也是在上篇文章的基础上扩展而来的。 一个系统一般都具有多种用户类型,如管理员、普通用户和运营者账号等,这些用户都存储在不同的表中。当然,通过对 Token 的内容进行条件判断,一个 Realm 是可以直接实现多个账号登录的,但是这样将导致不同用户的登录完全耦合在一起,这不是我们想看到的,所以有了多 Realm 的需求,并且 Shiro 是支持多 Realm 的。 1. 实现逻辑 1.1 分析 通过阅读 S

玖涯博客 1729

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Springboot Shiro 多Realm 认证和授权

Shiro 多Realm 认证和授权 一本正经教学时间 新人博主,求点赞求关注 1、多Realm 先分别编写好多个Realm各种认证和授权的规则 这里是StaffRealm.java 和 StudentRealm.java //StaffRealm public class StaffRealm extends AuthorizingRealm { @Autowired StaffRoleServiceImpl staffRoleService; @Autowired Rol

weixin_43224937的博客 1010

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

shiro实现不同身份使用不同Realm进行验证

假设现在有这样一种需求:存在两张表user和admin,分别记录普通用户和管理员的信息。并且现在要实现普通用户和管理员的分开登录,即需要两个Realm——UserRealm和AdminRealm,分别处理普通用户和管理员的验证功能。   但是正常情况下,当定义了两个Realm,无论是普通用户登录,还是管理员登录,都会由这两个Realm共同处理。这是因为,当配置了多个Realm时,我们通常使用的认证器是shiro自带的org.apache.shiro.authc.pam.ModularRealmAuthent

m0_67401545的博客 501

Shiro的多Realm验证的实现--shiro实现不同身份使用不同Realm进行验证

如果要看多Realm进行授权: 请参看 https://blog.csdn.net/u013294097/article/details/90066869 假设现在有这样一种需求:存在两张表user和admin,分别记录普通用户和管理员的信息。并且现在要实现普通用户和管理员的分开登录,即需要两个Realm——UserRealm和AdminRealm,分别处理普通用户和管理员的验证功能。 ...

Buggggggg 4431

Shiro实现多Realm认证、SecurityManager配置realms

认证策略实际上是AuthenticationStrategy这个接口,它有三个实现: • AuthenticationStrategy 接口的默认实现: • FirstSuccessfulStrategy:只要有一个 Realm 验证成功即可,只返回第 一个 Realm 身份验证成功的认证信息,其他的忽略; • AtLeastOneSuccessfulStrategy:只要有一个Realm验...

Hern(宋兆恒) 2822

SpringBoot 整合shiro实现多Realm的控制

文章目录SpringBoot 整合shiro实现多Realm的控制一、场景1、假设是让你设计这个表 你会怎么设计?2、管理员的表和用户的表 假设我们都使用shiro来进行认证 ? 怎么办?3、存在两个问题二、编写代码1、导包2、配置application.properies3、编写登陆页面4、编写user模块登陆成功的页面5、编写Admin模块登陆成功的页面6、编写登陆类型的枚举7、编写校验器...

yuemmm的博客 2419

自学-Shiro中多Realm的配置-09

项目结构: 学习了前几节,只是知道了验证的一个流程和一些其他的原理等。 那么Realm我们该怎么去理解呢? 首先得知道Realm是什么?怎么操作?为什么要使用Realm? ①:Realm:域, Shiro 从 Realm 获取安全数据 (如用户、 角色、 权限) , 就是说 SecurityManager要验证用户身份, 那么它需要从 Realm 获取相应的用户进行比较

女神的高冷范 2992

Spring Boot集成Shiro的多realm多表登录配置

推荐参考以下博文 https://blog.csdn.net/cckevincyh/article/details/79629022 原理 通过继承ModularRealmAuthenticator类,进行配置后接管了对realm的控制。 在重写的方法中,通过对realm的名字进行区分,使不同用户登录通过不同的realm。 以下是我的代码,不建议看,是我积累用于以后直接copy的 请看以上推荐...

zm9898的博客 933

Shiro实现多realm方案

公司开始了新项目,新项目的认证采用的是Shiro实现。由于涉及到多端登录用户,而且多端用户还是来自不同的表。 这就涉及到了Shiro的多realm,今天的demo主要是介绍Shiro的多realm实现方案,文中包含所有的代码,需要的朋友可以无缝copy。...

程序员田同学的博客 3420

Shiro-多Realm配置及认证策略

 认证策略  用法 spring配置文件 &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:sche...

qq_36722039的博客 1141
上一篇: jenkins+weblogic/tomcat完全部署
下一篇: dubbo程序jar包启动shell
S-u-n-n-y
博客等级 码龄14年 18粉丝 19原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值