**
* 自定义Realm、实现抽象类AuthorizingRealm
*/
public class CustomRealm extends AuthorizingRealm{
Map<String,String> userMap=new HashMap<>(16);
{
//模拟缓存
userMap.put("link","7bbb77ff644c125c9a8cc871b057df09");
}
//授权
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
String userName= (String) principalCollection.getPrimaryPrincipal();
//从数据库或缓存中获取角色数据
Set<String> roles=getRolesByUserName(userName);
Set<String> permissions=getPermissionByUserName(userName);
SimpleAuthorizationInfo simpleAuthorizationInfo=new SimpleAuthorizationInfo();
simpleAuthorizationInfo.setRoles(roles);
simpleAuthorizationInfo.setStringPermissions(permissions);
return simpleAuthorizationInfo;
}
private Set<String> getPermissionByUserName(String userName) {
Set<String> sets=new HashSet<>();
sets.add("user:delete");
sets.add("user:add");
return sets;
}
private Set<String> getRolesByUserName(String userName) {
Set<String> sets=new HashSet<>();
sets.add("admin");
sets.add("user");
return sets;
}
//认证
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
//1、从主体传来的信息获取用户名
String userName=(String) authenticationToken.getPrincipal();
//2、从数据库获取凭证
String password=getPasswordByUsername(userName);
if(password==null){
return null;
}
SimpleAuthenticationInfo authorizationInfo=new SimpleAuthenticationInfo("link",password,"realName");
authorizationInfo.setCredentialsSalt(ByteSource.Util.bytes("min"));
return authorizationInfo;
}
private String getPasswordByUsername(String userName) {
return userMap.get(userName);
}
public static void main(String[] args){
Md5Hash md5Hash=new Md5Hash("123456","min");
System.out.println(md5Hash.toString());
//加密后密码:e10adc3949ba59abbe56e057f20f883e
//加salt后的加密密码:7bbb77ff644c125c9a8cc871b057df09
}
}
/**
*测试验证
*/
public class CustomRealmTest {
@Test
public void testAuthentication(){
CustomRealm customRealm=new CustomRealm();
//1、构建SecurityManger环境
DefaultSecurityManager defaultSecurityManager=new DefaultSecurityManager();
defaultSecurityManager.setRealm(customRealm);
//数据加密处理
HashedCredentialsMatcher matcher=new HashedCredentialsMatcher();
matcher.setHashAlgorithmName("md5");
matcher.setHashIterations(1);//加密的次数
customRealm.setCredentialsMatcher(matcher);
//2、主体提交认证请求
SecurityUtils.setSecurityManager(defaultSecurityManager);
Subject subject= SecurityUtils.getSubject();
UsernamePasswordToken token=new UsernamePasswordToken("link","123456");
subject.login(token);
System.out.println("Authenticated:"+subject.isAuthenticated());
}
}
相关推荐
华中科技大学 计算机组成原理 educoder Logisim平台 计算机数据表示实验
本文主要是对 计算机数据表示实验的笔记和相关Logisim平台的图,供大家学习交流使用。 需要源文件或者源代码,可以留言评论! 目录实验目的第1关:汉字国标码转区位码实验第2关:汉字机内码获取实验第3关:偶校验编码设计第4关:偶校验解码电路设计第5关:16位海明编码电路设计第6关:16位海明解码电路设计第7关:海明编码流水传输实验第8关:16位CRC并行编解码电路设计第9关:CRC编码流水传输实验实验结果: 实验目的 本实训将帮助同学们巩固对计算机中数据表示方法的理解,要求能设计汉字国标码与区位码之间的转换
Shiro自定义Realm密码加密步骤(三)
先看(Shiro自带的Md5加密方法)MD5加密的例子 public static void main(String[] args) { String password ="666"; Md5Hash md5Hash =new Md5Hash(password); System.out.println(md5Hash); ...
全国大学校园网—拓扑图欣赏
全国大学网络拓扑图(一百张) 典型十张 1、 中央财经大学 2、国防科技大学 3、济南大学 4、西安石油大学 5、南通大学IPV6网络 6、中国矿业大学 7、青海师范大学 8、内蒙古科技大学 9、三峡大学 10、中共江苏省党校 剩余90张 点赞、评论获取 ...
2024年Android最全Realm数据库使用教程(七):数据库加密和Realm使用注意事项(1),2024年最新高级android面试题2024
UI这块知识是现今使用者最多的。当年火爆一时的Android入门培训,学会这小块知识就能随便找到不错的工作了。不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧!
STMCubeMX使用TB6612驱动编码轮并进行测速
TB6612电机驱动模块通过IN1和IN2引脚控制电机的旋转方向,并通过PWM信号的占空比调节电机速度。代码示例展示了如何使用GPIO控制电机的正反转,以及如何动态调整PWM占空比实现速度控制。系统设计中,TB6612与编码减速电机连接,STM32CubeMX用于初始化GPIO和PWM输出。编码器接口配置使用TIM3进行测速,TIM4定时器用于速度计算。Keil软件中编写的代码包括编码轮计数值获取、速度计算、电机正反转控制以及小车运动控制等功能。通过OLED显示速度,并实现电机的调试与测试。
华为昇腾310P3+deepseek蒸馏版性能调优:FP16精度优化全记录
本文详细介绍了在华为昇腾310P3硬件环境下优化DeepSeek蒸馏版模型FP16精度的关键技术路径。通过分层量化策略、内存分配优化和并行计算配置,显著提升模型推理性能,实现83%的并发处理能力提升,同时保持98.7%的原始模型准确率。
Realm数据库使用教程(七):数据库加密和Realm使用注意事项
Realm数据库使用教程(六):数据迁移数据库加密Realm自带数据库加密,需要64位字节数据进行加密。 官方原文Realm 文件可以通过传递一个512位(64字节)的密钥参数给 Realm.getInstance().encryptionKey() 来加密存储在磁盘上。byte[] key = new byte[64]; new SecureRandom().nextBytes(key); Rea
基于改进Unet的多场景水果图像分割与分类研究
本文针对复杂场景下的水果图像分割问题,提出了一种改进Unet模型。通过构建包含8类水果、3种成熟度及多种干扰场景的数据集,采用ResNet50与MobileNetV3作为骨干网络,并在跳跃连接层集成CBAM注意力机制。实验表明,改进模型在测试集上达到91.6%的mIoU,推理速度提升23%,特别在重叠水果和低光照场景表现突出。研究为农业视觉检测提供了有效解决方案。
Cryptography加密和Realm领域的作用
从这个意义上讲,Realm 实质上是一个安全相关的 DAO:它封装了数据源的连接细节,并在需要时将相关数据提供给 Shiro。公开密钥密码体制对这两方面的问题都给出了出色的解答,并正在继续产生许多新的思想和方案。2. Shiro 内置了可以连接大量安全数据源(又名目录)的 Realm,如 LDAP、关系数据库(JDBC)、类似 INI 的文本配置资源以及属性文件等。对信息发送与接收人的真实身份的验证、对所发出/接收信息在事后的不可抵赖以及保障数据的完整性是现代密码学主题的另一方面。
【Simulink教程案例7】基于Simulink的滑模控制器设计与实现
欢迎订阅滑膜控制是一种变结构控制策略,其和常规控制方法的主要区别在于控制的不连续性,即一种使系统结构随时间变化的开关特性。所以,滑膜控制器也叫做变结构控制器,其本质是一类特殊的非线性控制器,并且这种非线性为不连续性。滑膜控制器和其他控制方式最大的区别在于其结构的不固定性,在其工作过程中,系统当前的状态会发生变化,使得系统按照预先设置的“滑动模态”的状态轨迹运动。正是由于这个特点,滑膜控制器具有快速响应的优点。滑模控制的基本定义如下所示:1).穿越切换面上的某个点;2).从切换面上的某个点离开;
MinerU PDF解析工具:从安装配置到本地部署与API调用的全流程指南
MinerU是由上海人工智能实验室开源的高质量PDF解析工具,可将包含图片、公式、表格的复杂PDF转换为Markdown和JSON格式。安装前需准备Python 3.10-3.13环境,推荐使用8核CPU和32GB内存。支持通过HuggingFace或ModelScope下载模型,国内用户建议使用ModelScope源加速下载。配置文件中可设置本地模型路径,支持多种语言识别和两种解析后端(Pipeline和VLM)。输出包含可视化文件、内容文件和中间结果文件,并提供了完整的Python API调用示例。
Shrio与SpringBoot整合(二)配置多个Realm
shrio与springboot的简单整合: 1、Spring Boot 与Shrio的简单整合,适合做单体项目 2、Shrio 的会话管理,可以用在前后端分离的项目 3、Shrio 使用redis做缓存 可以参考文章:Shrio与SpringBoot整合(一)_我是混IT圈的-优快云博客 这里主要是Shiro配置多个Realm进行鉴权: 总共三个Reaml,分别是老师、家长、学生,其他老师是免密登录,家长和学生是账号密码登录。 Shrio配置的时候,这里没有配置密码加密,所以这里的账号密码
10、数据挖掘与轨迹生成技术:FSSEMiner与CondTraj - GAN的探索
本文介绍了两种先进的数据处理技术:FSSEMiner算法用于从动态属性图中挖掘频繁顺序子图演化模式,揭示如交通流和疾病传播等复杂系统的演化规律;CondTraj-GAN是一种端到端的条件生成对抗网络,能够生成高质量的合成车辆轨迹,解决真实轨迹数据因隐私问题难以获取的挑战。通过实验评估与真实数据集验证,两种技术在可扩展性、实用性及生成质量方面均表现出色,并在交通管理、城市规划、自动驾驶研发等领域具有广泛应用前景。
SpringBoot + Apache Shrio + JWT +Redis 实现权限认证
什么是Apache shrio Apache Shiro 是一个强大灵活的开源安全框架,可以完全处理身份验证、授权、加密和会话管理。 Realm是Shiro的核心组建,也一样是两步走,认证和授权,在Realm中的表现为以下两个方法。 认证:doGetAuthenticationInfo,核心作用判断登录信息是否正确 授权:doGetAuthorizationInfo,核心作用是获取用户的权限字符串,用于后续的判断 Apache Shrio 过滤器 当 Shiro 被运用到 web 项目时,Shir
廖雪峰Python教程[完整版]
廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白
ET2012新版免狗免安装绿色软件
ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,
【基础框架】Shrio安全框架
基于主页的权限管理(不同用户使用不同的主页,权限通过主页功能菜单进行限制)基于用户和权限的权限管理基于角色的访问控制认证:对用户的身份进行检查(登录验证)授权:对用户的权限进行检查(是否有对应的操作权限)流程示意图: 认证,验证用户是否有相应的身份—登录认证; 授权,即权限验证;对已经通过认证的用户检查是否具有某个权限或者角色,从而控制是否能够进行某种操作;会话管理,用户在认证成功之后创建会话,在没有退出之前,当前用户的所有信息都会保存在这个会话中;可以是普通的JavaSE应用,也可以是web应用;加密
pscad IEEE标准系统搭建说明
pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。
SpringBoot2.2+shrio实现简单的注册,登陆验证
1.什么是shrio? 官方定义 意思是: Apache Shrio是一个强大且使用简单的Java加密框架,可以进行验证,授权,加密和会话管理。Shrio有简单且容易理解的API,你可以快速且容易的保护任何应用程序——小的移动应用程序和更大的企业级和web网站(纯属个人翻译,没有用第三方翻译) 官网地址:http://shiro.apache.org/ 源码地址:项目源码 2.什么是Authen...
蓝牙模块HM-10手册
蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。
Apache_Shrio
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代码
Shiro基础:简单用户认证+权限测试+自定义安全策略+MD5加密
目录1.简介1.1什么是Shiro1.2Shiro整体架构图2.测试代码2.1.目录结构2.2pom.xml2.3application.yml3.简单的用户认证3.1 shiro_first.ini3.2TestShiro4.拥有权限的简单测试4.1shiro_permission.ini4.2TestShiroPermissions5.自定义安全策略的shiro应用案例:5.1shiro_myrealm.ini5.2MyRealm5.3 TestShiroMyRealm6.自定义安全策略并凭证MD5加密
Shrio认证与盐加密 -- SSM
一、Shrio认证流程 主体(subject)需要携带身份信息和凭证信息,shiro在认证时会将这些信息打包成一个令牌,进入到安全管理器中进行认证。 在 shiro 中,用户需要提供principals (身份)和credentials(凭证)给shiro,从而应用能验证用户身份。身份即帐号/凭证即密码 二、Shrio登录认证案例 SSM 1.导入Shrio相关依赖 <!-- shiro核心包 --> <dependency> ..
Shrio入门
创建MyRealm类继承AuthenticatingRealm1、自定义登录认证方法,shiro的login方法的底层会调用该类的认证方法进行认证2、需要配置自定义的realm生效,在ini文件中可以配置,在springboot中可以配置3、该方法只是获取进行比对的信息,认证逻辑还是按照shiro底层逻辑认证完成//自定义登录认证方法,shiro的login方法的底层会调用该类的认证方法进行认证//需要配置自定义的realm生效,在ini文件中可以配置,在springboot中可以配置。
SpringBoot 13、整合Shrio
Shiro 什么是 Shiro 官网:http://shiro.apache.org/ 是一款主流的 Java 安全框架,不依赖任何容器,可以运行在 Java SE 和 Java EE 项目中,它的主要作用是对访问系统的用户进行身份认证、授权、会话管理、加密等操作。不用第三方框架完全自己开发用Filter也可以,只要你不怕累并且考虑周全。 Shiro 就是用来解决安全管理的企业级系统化框架。 Shiro 核心组件 用户、角色、权限:会给角色赋予权限,给用户赋予角色。 1、UsernamePassword
Shrio与SpringBoot整合(一)
Shiro 简介: Apache Shiro 是 Java 的一个安全框架。目前,使用 Apache Shiro 的人越来越多,因为它相当简单,对比 Spring Security,可能没有 Spring Security 做的功能强大,但是在实际工作时可能并不需要那么复杂的东西,所以使用小而简单的 Shiro 就足够了。对于它俩到底哪个好,这个不必纠结,能更简单的解决项目问题就好了。 Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在 JavaSE 环境,也可以用在 JavaEE 环境。Sh
Shrio功能应用(一)--登陆验证(源码)以及权限执行过程
文章目录执行过程代码示例 执行过程 1 .前台页面登陆后,执行登陆验证方法subject.login(token);实际调用的是securityManager.login(this, token) 1-1.securityManager.login(this, token)方法里调用 auth...
Shrio 安全框架
几乎所有涉及用户的系统都需要进行权限管理,权限管理涉及到一个系统的安全。Spring Boot 的安全框架整合方案中还有一个璀璨的明珠:Shrio。Shiro是一款由Java 编写的安全框架,功能强大,入手容易。Shiro 提供了一套完的RABC模式的授权认证体系,可以对密码进行加密,并完成安全的会话管理。与SpringSecurity 相比显得功能较少,但是对于追求“小而美”的解决方案的开发者和项目来说Shiro使用起来更加得心应手。用于身份验证以及登录,检查用户是否拥有相应的角色权限。
Shiro
文章目录一、初识shiro1.shiro简介:2.框架图说明:3.从外部查看shiro框架4.内部结构框架5.常见单词说明6.Shiro中的shiro.ini说明:(1) 、main(2)、users(3)、roles(4)urls6.第一个案例:①项目总体图:添加依赖:②添加shiro.ini文件③认证操作:④实现: 一、初识shiro 1.shiro简介: 官网 Apache Shiro是一...
springboot+shiro+jwt实现登录+权限验证
一、简介: JWT优点: 1.基于Token的身份认证是无状态的,服务器或者Session中不会存储任何用户信息-应用程序可以根据需要扩展和添加更多的机器,而不必担心用户登录的位置。 2.支持跨域访问: Cookie是不允许垮域访问的,token支持。 3.解耦: 不需要绑定到一个特定的身份验证方案。Token可以在任何地方生成,只要在 你的API被调用的时候, 你可以进行Token生成调用即可。 4.更适用于移动应用: Cookie不支持手机端访问,token支持。 5.性能: token生成
2万+



被折叠的 条评论
为什么被折叠?



