登录认证:

注意,下面我是以连接orcal数据库为例的依赖,如果各位同仁使用的是骑她数据库,可以换成对应数据库的依赖(数据源不用换)

Pom.xml增加依赖:

<!--引入连接orcal的jar包-->
<!-- oracle驱动 -->
<!-- https://mvnrepository.com/artifact/com.oracle/ojdbc14 -->
<dependency><groupId>com.oracle</groupId><artifactId>ojdbc7</artifactId><version>7.0.0</version>
</dependency>
<!--引入数据源-->
<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.6</version>
</dependency>

新建名为JdbcRelamTes的t测试类:

JdbcRelamTest.java代码:

package com.shiro.shiroframe;import com.alibaba.druid.pool.DruidDataSource;
import org.apache.catalina.security.SecurityUtil;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.realm.jdbc.JdbcRealm;
import org.apache.shiro.subject.Subject;
import org.junit.jupiter.api.Test;public class JdbcRelamTest {DruidDataSource druidDataSource = new DruidDataSource();{druidDataSource.setUrl("jdbc:oracle:thin:@localhost:1521:ORCL");druidDataSource.setUsername("testyanshemiyue");//你的数据库账号druidDataSource.setPassword("testhourumiyu");//你的数据库密码}@Testpublic void JdbcRelamTest() {JdbcRealm jdbcRealm = new JdbcRealm();jdbcRealm.setDataSource(druidDataSource);DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();defaultSecurityManager.setRealm(jdbcRealm);SecurityUtils.setSecurityManager(defaultSecurityManager);Subject subject = SecurityUtils.getSubject();UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken("miyue", "houru");subject.login(usernamePasswordToken);System.err.println(subject.isAuthenticated());//true
    }
}

数据库创建表users并插入一条测试数据:

运行java代码:

如果账号密码正确打印结果为true,否则报错

补充:问什么要建users表?

下面是JdbcRealm类的源码:

在我们没有自己创建Sql语句时JdbcRealm会使用她自己定义的SQL语句,所以我们就根据此建表测试即可

角色认证和权限认证:

首先我们在数据库建立角色表和角色权限表并插入数据:

java代为:

package com.shiro.shiroframe;import com.alibaba.druid.pool.DruidDataSource;
import org.apache.catalina.security.SecurityUtil;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.realm.jdbc.JdbcRealm;
import org.apache.shiro.subject.Subject;
import org.junit.jupiter.api.Test;public class JdbcRelamTest {DruidDataSource druidDataSource = new DruidDataSource();{druidDataSource.setUrl("jdbc:oracle:thin:@localhost:1521:ORCL");druidDataSource.setUsername("luzhanshi");druidDataSource.setPassword("admin123");}@Testpublic void JdbcRelamTest() {JdbcRealm jdbcRealm = new JdbcRealm();jdbcRealm.setDataSource(druidDataSource);//开启查询权限的开关(默认是关闭的)否则Shiro是不会去查询权限数据的jdbcRealm.setPermissionsLookupEnabled(true);DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();defaultSecurityManager.setRealm(jdbcRealm);SecurityUtils.setSecurityManager(defaultSecurityManager);Subject subject = SecurityUtils.getSubject();UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken("miyue", "houru");//登录认证
        subject.login(usernamePasswordToken);System.err.println(subject.isAuthenticated());//true//角色认证:验证miyue是否具有admin角色subject.checkRole("admin");//权限认证:验证admin角色是否具有user:select权限subject.checkRoles("admin","user");subject.checkPermission("user:select");}
}

执行java代码,验证通过控制台不报错,否则控制台报错

JdbcRelam自定义SQL:

如果上面涉及到的三个表是我们自定义的表名,那就要我们自己修改SQL语句了:

1、如下图我们按照上面建表的过程一样,新建了三张和上面一样,但是名字不一样的表:

那么我们的对应的java代码就要修改对应的SQL:代码如下:

package com.shiro.shiroframe;import com.alibaba.druid.pool.DruidDataSource;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.realm.jdbc.JdbcRealm;
import org.apache.shiro.subject.Subject;
import org.junit.jupiter.api.Test;public class JdbcRelamTest {DruidDataSource druidDataSource = new DruidDataSource();{druidDataSource.setUrl("jdbc:oracle:thin:@localhost:1521:ORCL");druidDataSource.setUsername("luzhanshi");druidDataSource.setPassword("admin123");}@Testpublic void JdbcRelamTest() {JdbcRealm jdbcRealm = new JdbcRealm();jdbcRealm.setDataSource(druidDataSource);//开启查询权限的开关(默认是关闭的)否则Shiro是不会去查询权限数据的jdbcRealm.setPermissionsLookupEnabled(true);//创建自定义SQLString sql ="SELECT PASSWORD FROM TESTUSER WHERE USERNAME=?";String roleSql ="SELECT ROLE_NAME FROM Test_USER_ROLES WHERE USERNAME = ?";String rolePermissionSql ="SELECT PERMISSION FROM TEST_ROLES_PERMISSIONS WHERE ROLE_NAME = ?";jdbcRealm.setAuthenticationQuery(sql);jdbcRealm.setUserRolesQuery(roleSql);jdbcRealm.setPermissionsQuery(rolePermissionSql);DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();defaultSecurityManager.setRealm(jdbcRealm);SecurityUtils.setSecurityManager(defaultSecurityManager);Subject subject = SecurityUtils.getSubject();UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken("miyue", "houru");//登录认证
        subject.login(usernamePasswordToken);System.err.println(subject.isAuthenticated());//true
//        //角色认证:验证miyue是否具有admin角色subject.checkRole("admin");
//        //权限认证:验证admin角色是否具有user:select权限subject.checkRoles("admin","user");subject.checkPermission("user:select");}
}

转载于:https://www.cnblogs.com/luzhanshi/p/11039129.html

5、Shiro之jdbcRealm认证授权相关推荐

  1. SpringBoot整合Shiro实现登录认证授权操作

    Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理.使用Shiro的易于理解的API,您可以快速.轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和 ...

  2. java shiro原理_Springboot shiro认证授权实现原理及实例

    关于认证授权,需要的数据表有:用户表,角色表,用户角色关联表,权限表,角色权限关联表,一次如下 之前写过了shiro的登录认证,在自定义的realm中,我们实现AuthorizingRealm接口中的 ...

  3. shiro+jwt进行认证和授权的解决方案代码实例

    文章目录 token类 自定义realm 自定义的jwtFilter用于访问拦截: shiroconfig controller vo对象 测试 jwt和shiro框架就不多介绍了,直接上实例代码吧. ...

  4. SpringBoot整合Shiro实现登录认证和授权CHCache

    文章目录 一. springboot实现普通登录 1 添加依赖 2 编写配置文件 3 新建实体类和mapper 4 编写业务层代码 5 编写控制器 6 编写启动类 7 编写登录页面和主页面 二. sp ...

  5. Shiro身份认证授权原理

    shiro在应用程序中的使用是用Subject为入口的, 最终subject委托给真正的管理者ShiroSecurityMannager Realm是Shiro获得身份认证信息和来源信息的地方(所以这 ...

  6. SpringBoot整合Shiro搭建登录注册认证授权权限项目模板

    主要内容: 1 SpringBoot整合Shiro安全框架; 2 Shiro主要学习内容总结;(执行流程.主要对象接口.注意事项等) 3 Redis实现对权限信息缓存; ! 温馨提示: 想要快速搭Sh ...

  7. Shiro实现用户认证和授权

    文章目录 1. Shiro认证 1. Shiro认证流程源码分析 2. 自定义Realm 3. md5+salt密码加盐认证 2. Shiro授权 3. SpringBoot整合shiro 3.1 U ...

  8. Shiro 认证授权详解

    1     权限管理 1.1用户身份认证 1.1.1  概念 身份认证,就是判断一个用户是否为合法用户的处理过程.最常用的简单身份认证方式是系统通过核对用户输入的用户名和口令,看其是否与系统中存储的该 ...

  9. shiro配置 在springboot中前后端分离中,集成shiro认证授权框架

    一:介绍 Apache Shiro是Java的一个安全框架.由于它相对小而简单,现在使用的人越来越多. Authentication:身份认证/登录,验证用户是不是拥有相应的身份. Authoriza ...

最新文章

  1. linux平台下QtCreator中集成Valgrind系列工具
  2. JavaScript = TypeScript 类入门
  3. mybatis一级缓存导致sql查询出现问题
  4. JPA查找数据库最新一条消息
  5. 硬核图解!断网了,还能ping通 127.0.0.1 吗?为什么?
  6. 谈了千百遍的缓存数据的一致性问题
  7. 被黑客盯上了…数据都给打包带走了…
  8. mysql Error 1045(28000)
  9. elemenUI - 弹框组件alert - 宽度设置? - 疑问篇
  10. sourcetree提示无效路径_关于今明可转债申购的温馨提示
  11. 吴裕雄 python 神经网络——TensorFlow 花瓣分类与迁移学习(3)
  12. python把文件中的邮箱分类 保存到相应的文件里面
  13. java虚拟机工作原理_java虚拟机原理及工作原理都是什么?java虚拟机如何运行?...
  14. GB28181协议RTP传输
  15. HTML 参考手册- (HTML5 标准)
  16. c51单片机汇编语言指令,51单片机汇编指令详解
  17. 程序员如何更好的提升自己
  18. 用四阶RungeKutta方程解二阶常微分方程,并计算船舶在规则波中的横摇角(附Matlab代码)
  19. 我喜欢你时的内心活动
  20. 2023年中国地质大学(武汉)英语语言文学考研上岸前辈备考经验

热门文章

  1. TimesTen内存数据库监控 TT监控得懂这些
  2. 稳定智能的在线考试系统
  3. [Caffe]: HDF5Data Layer
  4. 如何在Mac上获取App Store的ipa包(非越狱手机也可以)
  5. 浅谈CPU位数和操作系统位数
  6. cad引出线段lisp_lisp将多条线条合并成一条多段线
  7. java后端实习第一个月总结
  8. 仓库软件可以管理仓库,这么简单!
  9. 报错:Collecting package metadata (current_repodata.json): failed
  10. 如何对word中不同页面设置不同页眉页脚