博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shiro(三),使用第三方jdbcRealm连接数据库操作
阅读量:4459 次
发布时间:2019-06-08

本文共 5273 字,大约阅读时间需要 17 分钟。

这里采用第三方实现好的JdbcRealm连接数据库;首先来看一下源码;

接着前面的说;就把这个类当做我们自己写的就好了,我们需要实例化它,然后给他注入一个数据源

下面是ini文件配置

[main]#采用第三方JdbcRealm连接数据库jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm#实例化数据源dataSource=com.alibaba.druid.pool.DruidDataSource#设置参数dataSource.driverClassName=com.mysql.jdbc.DriverdataSource.url=jdbc:mysql://localhost:3306/shirodataSource.username=rootdataSource.password=root#将数据源设置到realm中jdbcRealm.dataSource=$dataSourcejdbcRealm.permissionsLookupEnabled=truesecurityManager.realms=$jdbcRealm

下面是sql脚本;大家测试可以直接复制去数据库执行

/*Navicat MySQL Data TransferSource Server         : localhost_3306Source Server Version : 50527Source Host           : localhost:3306Source Database       : shiroTarget Server Type    : MYSQLTarget Server Version : 50527File Encoding         : 65001Date: 2018-03-30 22:31:17*/SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for `roles_permissions`-- ----------------------------DROP TABLE IF EXISTS `roles_permissions`;CREATE TABLE `roles_permissions` (  `id` int(11) NOT NULL DEFAULT '0',  `role_name` varchar(20) DEFAULT NULL,  `permission` varchar(20) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Records of roles_permissions-- ----------------------------INSERT INTO `roles_permissions` VALUES ('1', 'system', 'update');-- ------------------------------ Table structure for `users`-- ----------------------------DROP TABLE IF EXISTS `users`;CREATE TABLE `users` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `username` varchar(20) DEFAULT NULL,  `password` varchar(20) DEFAULT NULL,  `password_salt` int(11) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;-- ------------------------------ Records of users-- ----------------------------INSERT INTO `users` VALUES ('1', 'admin', '666', null);-- ------------------------------ Table structure for `user_roles`-- ----------------------------DROP TABLE IF EXISTS `user_roles`;CREATE TABLE `user_roles` (  `id` int(11) NOT NULL DEFAULT '0',  `username` varchar(20) DEFAULT NULL,  `role_name` varchar(20) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Records of user_roles-- ----------------------------INSERT INTO `user_roles` VALUES ('1', 'admin', 'system');

下面是测试代码

package com;import org.apache.shiro.SecurityUtils;import org.apache.shiro.authc.AuthenticationToken;import org.apache.shiro.authc.HostAuthenticationToken;import org.apache.shiro.authc.UsernamePasswordToken;import org.apache.shiro.config.IniSecurityManagerFactory;import org.apache.shiro.mgt.SecurityManager;import org.apache.shiro.session.Session;import org.apache.shiro.subject.Subject;import org.apache.shiro.util.Factory;/** * 测试shiro第一个案例 * */public class App {    public static void main( String[] args )    {            /*实例化工厂*/            Factory
factory = new IniSecurityManagerFactory("classpath:shiro.ini"); /*获取实例*/ SecurityManager securityManager = factory.getInstance(); /*设置参数*/ SecurityUtils.setSecurityManager(securityManager); /*获取登录实例*/ Subject subject = SecurityUtils.getSubject(); /*实例化token,传入登录的用户和密码*/ UsernamePasswordToken token = new UsernamePasswordToken("admin", "666"); subject.isAuthenticated(); try { /*进行登录*/ subject.login(token); System.out.println("登录成功!!"); if (subject.hasRole("system")){ System.out.println("拥有该角色"); }else { System.out.println("没有该角色"); } if (subject.isPermitted("update")){ System.out.println("拥有该权限"); }else { System.out.println("没有该权限"); } /*退出登录*/ subject.logout(); }catch (Exception e){ System.out.println("登录错误!!"); } }}

需要依赖文件请点击此处链接

 

下面的代码是将ini文件彻底转换为java代码

package com;import com.alibaba.druid.pool.DruidDataSource;import org.apache.shiro.SecurityUtils;import org.apache.shiro.authc.UsernamePasswordToken;import org.apache.shiro.config.IniSecurityManagerFactory;import org.apache.shiro.mgt.SecurityManager;import org.apache.shiro.realm.jdbc.JdbcRealm;import org.apache.shiro.subject.Subject;import org.apache.shiro.util.Factory;public class TestShiro {    public static void main(String[] args) {                Factory
factory = new IniSecurityManagerFactory(); SecurityManager instance = factory.getInstance(); JdbcRealm realm = new JdbcRealm(); DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("mysql://localhost:3306/shiro"); dataSource.setUsername("root"); dataSource.setPassword("root"); realm.setDataSource(dataSource); realm.setPermissionsLookupEnabled(true); SecurityUtils.setSecurityManager(instance); Subject subject = SecurityUtils.getSubject(); UsernamePasswordToken token = new UsernamePasswordToken("admin", "666"); subject.login(token); }}

 

转载于:https://www.cnblogs.com/qq376324789/p/8679054.html

你可能感兴趣的文章
大数据应用期末总评
查看>>
Windows Store App之数据存储
查看>>
实验五:Xen环境下多虚拟机的桥接配置
查看>>
抽象类和开闭原则
查看>>
English class 82 The Importance of traveling
查看>>
C++ 类与对象
查看>>
python用递归函数解汉诺塔游戏
查看>>
可持久化线段树入门小结
查看>>
Redis与Python交互
查看>>
VueJS参数绑定:v-bind:href,v-on:event
查看>>
Jmeter进行接口测试
查看>>
第一天python学习内容
查看>>
Maximum-SubsequenceSum
查看>>
常用的一些shell变量
查看>>
IOS省电
查看>>
Android无法删除项目+导入项目报错
查看>>
【python】获取网页中中文内容并分词
查看>>
每周进度条(第14周)
查看>>
驱动使用的一致性
查看>>
一起搞懂PureMVC(二)
查看>>