Shiro 学习笔记(2)—— JdbcRealm
来源:互联网 发布:linux系统运维面试题 编辑:程序博客网 时间:2024/05/20 07:19
Shiro 学习笔记(2)—— JdbcRealm
有了 Shiro 的 HelloWorld 以后,我们就对 Shiro 有了一个基本的认识,下面我们直接上代码来说明如何使用 JdbcRealm。
1、添加 Gradle 依赖
testCompile group: 'junit', name: 'junit', version: '4.12'compile 'org.apache.shiro:shiro-core:1.2.2'compile("org.slf4j:slf4j-api:1.7.21")compile("org.slf4j:slf4j-log4j12:1.7.21")compile("com.alibaba:druid:1.0.19")compile("mysql:mysql-connector-java:5.1.39")compile("commons-logging:commons-logging:1.2")
2、编写 shiro.ini 配置
[main]jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealmdataSource= com.alibaba.druid.pool.DruidDataSource# 数据源还可以使用 C3P0 的数据源# dataSource=com.mchange.v2.c3p0.ComboPooledDataSourcedataSource.username=rootdataSource.password=123456dataSource.url=jdbc:mysql://localhost:3306/db_shirodataSource.driverClassName=com.mysql.jdbc.DriverjdbcRealm.dataSource=$dataSourcesecurityManager.realms=$jdbcRealm
3、编写 SQL ,制造数据
CREATE DATABASE db_shiro DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;USE db_shiro;DROP TABLE IF EXISTS users;CREATE TABLE users( id INT PRIMARY KEY AUTO_INCREMENT COMMENT '用户表主键', userName VARCHAR(20) COMMENT '用户名', PASSWORD VARCHAR(20) COMMENT '密码');INSERT INTO users (userName,PASSWORD)VALUES ('liwei','123456'),('zhouguang','666666');
4、编写测试代码
public class ShiroUtil { // 注意:这里 SecurityManager 所在的包名 // 读取配置文件,初始化SecurityManager工厂 public static Subject login(String configFileName,String userName,String password){ Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:"+configFileName); SecurityManager securityManager= factory.getInstance(); // 把 securityManager 的实例绑定到 SecurityUtils 上 SecurityUtils.setSecurityManager(securityManager); // 得到当前执行的用户 Subject currentUser = SecurityUtils.getSubject(); // 自己创建一个令牌 UsernamePasswordToken token = new UsernamePasswordToken(userName,password); try { // 开始由 Shiro 帮助我们完成身份认证的逻辑 currentUser.login(token); System.out.println("登录成功!"); } catch (UnknownAccountException e) { e.printStackTrace(); System.out.println("无效的用户名"); }catch (IncorrectCredentialsException e){ e.printStackTrace(); System.out.println("错误的密码"); }catch (AuthenticationException e){ e.printStackTrace(); } return currentUser; }}
可以看到我们的测试代码其实和上一节的 HelloWorld 是一样的,我们还是用的 IniRealm 作为安全数据源。只不过我们配置了数据源和 JdbcRealm。此时数据表和字段的名称都是 Shiro 框架规定好的,表名和字段名都必须这么起,严重耦合。
当然,我们还可以使用其它的 Realm ,更灵活地实现认证功能。
0 0
- Shiro 学习笔记(2)—— JdbcRealm
- Shiro学习之JdbcRealm
- shiro jdbcRealm
- Shiro Jdbcrealm
- Shiro学习笔记(1)——shiro入门
- Shiro学习笔记(6)——shiro缓存
- Shiro 学习笔记(7)—— Shiro 集成 Web
- Shiro学习笔记(2)——身份验证之Realm
- Shiro 学习笔记(2)—— 授权初步
- Shiro 学习笔记(2)—— Jdbc Realm
- shiro学习笔记-2
- Shiro笔记(2)——身份验证
- 【shiro】shiro学习笔记2-自定义realm
- shiro学习笔记2——组件之身份验证
- Shiro学习笔记(3)——授权(Authorization)
- Shiro学习笔记(4)——ini 配置
- Shiro学习笔记(5)——web集成
- Shiro 学习笔记(1)—— Hello World
- 最大公约数问题
- 文章标题+路径问题
- Spring框架参考手册_5.0.0_中文版_Part II_3.3
- spark源码阅读笔记Dataset(一)初识Dataset
- java在pdf模板的指定位置插入图片
- Shiro 学习笔记(2)—— JdbcRealm
- 泡了个学妹,好开心
- java在word(*.docx)指定地点插入图片
- 启动hadoop集群DataNode不显示,DataNode显示NodeManager不显示
- 215. Kth Largest Element in an Array 难度:medium 类别:分治
- Shiro 学习笔记(3)—— 自定义 Realm
- Sunny-Ngrok
- Shiro 学习笔记(4)—— 基于字符串的角色和权限
- Android 解耦方法 ~~~ 事件总线