自定义一个realm类,实现realm接口 package com; import org.apache.shiro.authc.*; import org.apache.shiro.realm.Realm; public class MyRealm implements Realm { /** * 获取当前realm的名称 * @return */ @Override public String getName() { return "MyRealm"; } /** * 判断当前认证…
shiro中自定义realm实现md5散列算法加密的模拟.首先:我这里是做了一下shiro 自定义realm散列模拟,并没有真正链接数据库,因为那样东西就更多了,相信学到shiro的人对连接数据库的一些操作已经不陌生了. 一:进行md5测试拿到加密后的值 我这里用密码111111来做测试. 二:建立自定义的realm模拟数据库查询 三:进行shiro-config.ini文件的配置 五:控制台输出 测试成功…
Shiro认证过程 创建SecurityManager--->主体提交认证--->SecurityManager认证--->Authenticsto认证--->Realm验证 Shiro授权过程 创建SecurityManager--->主体授权--->ecurityManager授权--->Authorizer授权--->Realm获取角色权限数据 1.pom.xml <?xml version="1.0" encoding=&q…
1.创建一个包存放我们自定义的realm文件: 创建一个类名为CustomRealm继承AuthorizingRealm并实现父类AuthorizingRealm的方法,最后重写: CustomRealm代码: package com.shiro.myrealm; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationInfo; import org.a…
简介: Realm:域,Shiro 从从 Realm 获取安全数据(如用户.角色.权限),就是说 SecurityManager 要验证用户身份,那么它需要从 Realm 获取相应的用户进行比较以确定用户身份是否合法:也需要从 Realm 得到用户相应的角色 / 权限进行验证用户是否能进行操作:可以把 Realm 看成 DataSource,即安全数据源.如我们之前的 ini 配置方式将使用 org.apache.shiro.realm.text.IniRealm. Realm源码: publi…
数据库设计 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <…
先来看问题    纠结了几个小时终于找到了问题所在,因为shiro的realm属于Filter,简单说就是初始化realm时,spring还未加载相关业务Bean,那么解决办法就是将springmvc的配置文件加载提前. 解决办法 打开web.xml文件   OK,问题解决! 解决方式2(不建议) public TenantServiceTypeTask(ServletContextEvent event) { super(); ServletContext sc=event.getServle…
添加shiro-realm.ini文件 [main] #自定义Realm myRealm=test.shiro.MyRealm #将myRealm设置到securityManager,相当于Spring中的注入 securityManager.realms=$myRealm 自定义MyRealm.java文件 /** * 认证 * @param token * @return * @throws AuthenticationException */ @Override protected Aut…
shiro-realm.ini [main] #自定义Realm myRealm=test.shiro.MyRealm #将myRealm设置到securityManager,相当于Spring中的注入 securityManager.realms=$myRealm MyRealm.java /** * 授权 * @param principals * @return */ @Override protected AuthorizationInfo doGetAuthorizationInfo(…
shiro-realm-md5.ini [main] #定义凭证匹配器 credentialsMatcher=org.apache.shiro.authc.credential.HashedCredentialsMatcher #散列算法 credentialsMatcher.hashAlgorithmName=md5 #散列次数 credentialsMatcher.hashIterations=2 #将凭证设置到realm myRealmMD5=test.shiro.MyRealmMd5 m…
引入 上一篇在讲解Realm简介时,介绍过Realm包含大概4类缺省的Realm,本章主要讲解: 1)IniRealm的用法: 2)JdbcRealm基于mysql   默认表及查询语句实现认证.授权: 3)JdbcRealm基于mysql自定义表及查询语句实现认证.授权. 4)自定义Realm. 在上一张讲解时,截图了一张Realm的类图,这里需要重复引用下: 从图中,我们可以看出AuthenticatingRealm是AuthorizingRealm的父类: 1)Authenticating…
Spring Security教程(二):自定义数据库查询   Spring Security自带的默认数据库存储用户和权限的数据,但是Spring Security默认提供的表结构太过简单了,其实就算默认提供的表结构很复杂,也不一定能满足项目对用户信息和权限信息管理的要求.那么接下来就讲解如何自定义数据库实现对用户信息和权限信息的管理. 一.自定义表结构 这里还是用的mysql数据库,所以pom.xml文件都不用修改.这里只要新建三张表即可,user表.role表.user_role表.其中u…
博客shiro学习笔记_0400_自定义Realm实现身份认证 介绍了认证,这里介绍授权. 1,仅仅通过配置文件来指定权限不够灵活且不方便.在实际的应用中大多数情况下都是将用户信息,角色信息,权限信息 保存到了数据库中.所以需要从数据库中去获取相关的数据信息.可以使用 shiro 提供的JdbcRealm来实现,,也可以自定义realm来实现.使用jdbcRealm往往也不够灵活.所以在实际应用中大多数情况都是自定义Realm来实现. 2,自定义Realm 需要继承 AuthorizingRea…
一.自定义Realm授权 前提:认证通过,查看Realm接口的继承关系结构图如下,要想通过自定义的Realm实现授权,只需继承AuthorizingRealm并重写方法即可 二.实现过程 1.新建module,添加如下pom依赖 <properties> <shiro.version>1.4.1</shiro.version> <loggingg.version>1.2</loggingg.version> </properties>…
一.概述 Shirom默认使用自带的IniRealm,IniRealm从ini配置文件中读取用户的信息,而大部分情况下需要从系统数据库中读取用户信息,所以需要实现自定义Realm,Realm接口如下: 由此可以分析: ①CachingRealm:负责缓存处理 ②AuthenticationRealm:负责认证 ③AuthorizingRealm:负责授权 通常情况下,自定义的Realm继承AuthorizingRealm即可实现认证与授权 二.自定义Realm实现认证 1.新建module,添加…
什么是Shiro shiro是apache的一个开源框架,是一个权限管理的框架,实现 用户认证.用户授权. spring中有spring security (原名Acegi),是一个权限框架,它和spring依赖过于紧密,没有shiro使用简单. shiro不依赖于spring,shiro不仅可以实现 web应用的权限管理,还可以实现c/s系统,分布式系统权限管理,shiro属于轻量框架,越来越多企业项目开始使用shiro. Shiro架构: subject:主体,可以是用户也可以是程序,主体要…
1.1 自定义Realm 上边的程序使用的是shiro自带的IniRealm,IniRealm从ini配置文件中读取用户的信息,大部分情况下需要从系统的数据库中读取用户信息,所以需要自定义realm.分享牛系列,分享牛专栏,分享牛. 1.1.1 shiro提供的realm 最基础的是Realm接口,CachingRealm负责缓存处理,AuthenticationRealm负责认证,AuthorizingRealm负责授权,通常自定义的realm继承AuthorizingRealm. 1.1.2…
通过shiro教程1我们发现仅仅将数据源信息定义在ini文件中与我们实际开发环境有很大不兼容,所以我们希望能够自定义Realm. 自定义Realm的实现 创建自定义Realmjava类 创建一个java文件继承AuthorizingRealm类,重写两个抽象方法 /** * 自定义的Realm * @author dengp * */ public class MyRealm extends AuthorizingRealm{ /** * 认证方法 * @param token * 就是我们在测…
1.1     散列算法 通常需要对密码 进行散列,常用的有md5.sha, 对md5密码,如果知道散列后的值可以通过穷举算法,得到md5密码对应的明文. 建议对md5进行散列时加salt(盐),进行加密相当 于对原始密码+盐进行散列.(盐就相当于加入一个随机数) 正常使用时散列方法: 在程序中对原始密码+盐进行散列,将散列值存储到数据库中,并且还要将盐也要存储在数据库中. 如果进行密码对比时,使用相同 方法,将原始密码+盐进行散列,进行比对. 1.2 MD5测试 package cn.qlq.…
上一节介绍了realm的作用: realm:需要根据token中的身份信息去查询数据库(入门程序使用ini配置文件),如果查到用户返回认证信息,如果查询不到返回null.token就相当于是对用户输入的用户名和密码的一个封装.下面就是创建一个用户名密码token: UsernamePasswordToken token = new UsernamePasswordToken("zhangsan", "111111"); Realm结构:…
上面一章说到shiro的认证和授权最底层就是调用realm的getAuthorizationInfo(获取用户的角色和资源)和getAuthenticationInfo(校验账号密码是否正确)两个方法. 如果我们要从数据库中查询用户和他的权限信息,我们可以使用shiro提供给我们的JdbcRealm JdbcRealm 添加jar <dependency> <groupId>mysql</groupId> <artifactId>mysql-connecto…
 自定义Realm实现身份认证 先来看下Realm的类继承关系: Realm接口有三个方法,最重要的是第三个方法: a) String getName():返回此realm的名字 b) boolean supports(AuthenticationToken token) :好像是说,判断是哪个类型的token c)* AuthenticationInfo getAuthenticationInfo(AuthenticationToken token) throws Authentication…
[Shiro]Apache Shiro架构之身份认证(Authentication) [Shiro]Apache Shiro架构之权限认证(Authorization) [Shiro]Apache Shiro架构之集成web [Shiro]Apache Shiro架构之实际运用(整合到Spring中) 之前写的博客里都是使用.ini文件来获取信息的,包括用户信息,角色信息,权限信息等.进入系统时,都是从.ini文件这读取进入的.实际中除非这个系统特别特别简单,否则一般都不是这样干的,这些信息都是…
数据库支持 在上一篇中使用ini 配置文件进行了相关权限数据的配置. 但是实际工作中,我们都会把权限相关的内容放在数据库里. 所以本知识点讲解如何放在数据库里来撸. RBAC 概念 RBAC 是当下权限系统的设计基础,同时有两种解释: 一: Role-Based Access Control,基于角色的访问控制 即,你要能够删除产品,那么当前用户就必须拥有产品经理这个角色 二:Resource-Based Access Control,基于资源的访问控制 即,你要能够删除产品,那么当前用户就必须…
写在前面 在上一篇文章<shiro认证流程源码分析--练气初期>当中,我们简单分析了一下shiro的认证流程.不难发现,如果我们需要使用其他数据源的信息完成认证操作,我们需要自定义Realm继承AuthorizingRealm类,并实现两个方法,分别对应授权和认证. 在这一篇文章当中,我们将介绍如何自定义Realm对象,完成认证信息数据源的切换. 自定义Reaml /**自定义Realm对象 * @author 赖柄沣 bingfengdev@aliyun.com * @version 1.0…
上篇文章中是使用的默认realm来实现的简单登录,这仅仅只是个demo,真正项目中使用肯定是需要连接数据库的 首先创建自定义realm文件,如下: 在shiro中注入自定义realm的完全限定类名: [main] # your custom realm path fooRealm=com.lee.shiro.realm.FooRealm # DI such as spring DI securityManager.realms=$fooRealm 自定义realm认证: /** * 设置real…
1.工程目录 pom文件还和以前设置的一样就是添加了一个数据库驱动, <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- 添加s…
用Shiro做登录权限控制时,密码加密是自定义的. 数据库的密码通过散列获取,如下,算法为:md5,盐为一个随机数字,散列迭代次数为3次,最终将salt与散列后的密码保存到数据库内,第二次登录时将登录的令牌再进行同样的运算后再与数据库的做对比. String algorithmName = "md5";String userName = "rose";String password = "rose123";int hashIterations =…
SpringMVC+SpringMVC+Mybatis项目 1:导入相关依赖 <dependencies> <!--测试依赖--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </depen…