在Shiro中,如果没有自定义Realm的话,那么权限管理数据是通过IniRealm的形式去读取配置文件shiro.ini来加载数据,但是以后的权限管理数据肯定都是来源于数据库的,所以我们要把数据更改到数据库。

shiro提供的Realm

SimpleAccountRealm类中进行认证


SimpleAccountRealm类中有两个方法,分别提供认证和授权

public class SimpleAccountRealm extends AuthorizingRealm {//省略//用于认证的方法protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {UsernamePasswordToken upToken = (UsernamePasswordToken)token;SimpleAccount account = this.getUser(upToken.getUsername());if (account != null) {if (account.isLocked()) {throw new LockedAccountException("Account [" + account + "] is locked.");}if (account.isCredentialsExpired()) {String msg = "The credentials for account [" + account + "] are expired";throw new ExpiredCredentialsException(msg);}}return account;}//用于授权的方法protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {String username = this.getUsername(principals);this.USERS_LOCK.readLock().lock();AuthorizationInfo var3;try {var3 = (AuthorizationInfo)this.users.get(username);} finally {this.USERS_LOCK.readLock().unlock();}return var3;}
}

自定义Realm

/*** @auther heling* @date 2021/10/4* 自定义realm实现,将认证/授权数据来源转为数据库的实现*/
public class CustomerRealm extends AuthorizingRealm {//授权@Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {return null;}//认证@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {//在token中获取用户名String principal = (String)authenticationToken.getPrincipal();System.out.println(principal);//根据身份信息使用jdbc mybatis查询相关数据库if("heling".equals(principal)){//参数1:返回数据库中正确的用户名//参数2:返回数据库中正确密码//参数3:提供当前realm的名字 this.getName();SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(principal,"123",this.getName());return simpleAuthenticationInfo;}return null;}
}

使用自定义Realm认证

/*** @auther heling* @date 2021/10/4* 使用自定义realm*/
public class TestCustomerRealmAuthenticator {public static void main(String[] args) {//创建securityManagerDefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();//设置自定义realmdefaultSecurityManager.setRealm(new CustomerRealm());//将安全工具类设置安全管理器SecurityUtils.setSecurityManager(defaultSecurityManager);//通过安全工具类获取subjectSubject subject = SecurityUtils.getSubject();//创建tokenUsernamePasswordToken token = new UsernamePasswordToken("heling", "123");try{System.out.println("认证状态:" + subject.isAuthenticated());subject.login(token); //用户认证System.out.println("认证状态:" + subject.isAuthenticated());}catch (UnknownAccountException e){e.printStackTrace();System.out.println("认证失败:用户名不存在");}catch (IncorrectCredentialsException e){e.printStackTrace();System.out.println("认证失败:密码错误");}}
}

Shiro中自定义Realm相关推荐

  1. Shiro 中的 Realm

    前言 之前写项目用了 Shiro 框架,来进行安全验证以及权限管理.当时项目赶得急,没怎么深入了解,只能说能跑能改,不过在使用的过程中发现 Shiro 确实很优秀.现在回过头来学习原理,读读源码,深入 ...

  2. shiro框架,自定义realm注入service失败解决办法

    shiro框架,自定义realm注入service失败解决办法 报错如下: org.springframework.beans.factory.BeanCreationException: Error ...

  3. shiro之自定义realm

    前言: 首先我们先分析怎么实现自定义某些realm,按照以往的方法肯定是实现接口或者继承某类 查看继承树结构 通过debug模式下分析源码可以得知 AuthenticatingRealm类中的 doG ...

  4. (六) shiro在web中自定义Realm

    1 前言 : shiro代码参考java1234网站<一头扎进shiro>视频敲出来的,原理这些请参视频 , 点击 下载源码 点击 下载数据库 2 项目结构图 3 代码 MyRealm.j ...

  5. 6、Shiro之自定义realm

    1.创建一个包存放我们自定义的realm文件: 创建一个类名为CustomRealm继承AuthorizingRealm并实现父类AuthorizingRealm的方法,最后重写: CustomRea ...

  6. Shiro框架:授权流程、授权方式、Shiro授权入门程序、自定义Realm进行授权

    一.Shiro授权: 1.授权与权限: (1)授权:访问控制,必须具有该资源的访问权限才可以访问该资源. (2)权限模型:标准权限数据模型包括 :用户.角色.权限(包括资源和权限).用户角色关系.角色 ...

  7. shiro集成 spring-加密md5配置--权限管理-shiro中的session 等等!!

    目录 1.shiro集成 spring 1.1 导入依赖的包 1.2 web.xml配置 2. 开发自定义Realm 2.1 创建测试数据表 2.3 编写后台支持服务 2.4 编写自定义的Realm ...

  8. 在shiro中控制自动登录

    场景一:集群中各节点登录状态保持一致,当然这个集群没有统一的认证中心 场景二:微信环境微店项目,自动登录,进入微店,则判断用户是否注册,如果已经注册则自动登录否则跳转到注册页面(ps:需要用户关注公众 ...

  9. shiro自定义Realm

    1.1 自定义Realm 上边的程序使用的是shiro自带的IniRealm,IniRealm从ini配置文件中读取用户的信息,大部分情况下需要从系统的数据库中读取用户信息,所以需要自定义realm. ...

  10. Shiro框架:Shiro简介、登陆认证入门程序、认证执行流程、使用自定义Realm进行登陆认证、Shiro的MD5散列算法

    一.Shiro介绍: 1.什么是shiro: (1)shiro是apache的一个开源框架,是一个权限管理的框架,实现用户认证.用户授权. (2)spring中有spring security,是一个 ...

最新文章

  1. 独家 | 一文解析统计学在机器学习中的重要性(附学习资源)
  2. 给迷茫的Java员一些中肯建议,你还在虚度光阴吗?
  3. 虚拟化的发展历程和实现原理——图文详解
  4. php对提交数据转码,如何使用php程序实现媒体转码消息的接收
  5. MyBatisPlus中全局Sql注入器应用_逻辑删除使用
  6. scikit-image 几个案例(下)
  7. 【51nod】1239 欧拉函数之和 杜教筛
  8. Delphi 7连接MySql 5 5 15
  9. laravel 数据库操作(表、字段)
  10. 点击button自动提交表单原因及解决方案
  11. android 删除特定字符串,android-从改造响应中删除不需要的字符串
  12. 欢乐大作战服务器维护,欢乐大作战
  13. linux exec操作文件描述符
  14. 这么好的视频不看吗?深度学习和线代,微积分
  15. swagger3 设置值可以为空_swagger3.0使用及https问题处理
  16. 百度 AI Studio 车牌识别
  17. SQL技巧——行转列/列转行
  18. Vue+SpringBoot打造房屋租售信息系统
  19. 员工转正申请书_员工转正申请书
  20. C# - 音乐小闹钟_BetaV1.0

热门文章

  1. 层次、网状、关系模型
  2. 称重软件测试工程师,无人值守称重管理系统研发团队
  3. randn函数 python_Python numpy matrix randn()用法及代码示例
  4. 【odoo15】自定义一个kanban视图
  5. 技嘉b365m小雕驱动工具_【黑苹果】技嘉B365M小雕+i5 9400F+RX590EFI分享
  6. 万物互联时代,谷歌、亚马逊Alexa、homekit该如何选择?
  7. 静态模型,动态模型!
  8. 发改委指导意见保障大豆产业安全
  9. Ubuntu 设置屏幕字体大小
  10. golang项目 七牛图片管理系统 基于GIN