第一步:进入eclipse新建一个shiro的maven工程

第二步:修改shiro工程的编码为utf-8
第三步:新建一个mysql数据库shiro,在这个数据库

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `roles_permissions`
-- ----------------------------
DROP TABLE IF EXISTS `roles_permissions`;
CREATE TABLE `roles_permissions` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `role_name` varchar(100) DEFAULT NULL,
  `permission` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_roles_permissions` (`role_name`,`permission`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of roles_permissions
-- ----------------------------

-- ----------------------------
-- Table structure for `users`
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `username` varchar(100) DEFAULT NULL,
  `password` varchar(100) DEFAULT NULL,
  `password_salt` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_users_username` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of users
-- ----------------------------
INSERT INTO `users` VALUES ('1', 'zhang', '123', null);
INSERT INTO `users` VALUES ('2', 'jin', '123', null);
INSERT INTO `users` VALUES ('3', 'li', '456', null);

-- ----------------------------
-- Table structure for `user_roles`
-- ----------------------------
DROP TABLE IF EXISTS `user_roles`;
CREATE TABLE `user_roles` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `username` varchar(100) DEFAULT NULL,
  `role_name` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_user_roles` (`username`,`role_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of user_roles
-- ----------------------------

第四步:加入pom中的内容,注意一定要加spring-jdbc;
<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">
<modelVersion>4.0.0</modelVersion>
<groupId>com.jintingbo.www</groupId>
<artifactId>shiro</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>shiro Maven Webapp</name>
<url>http://maven.apache.org</url>

<dependencies>

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
</dependency>

<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.25</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>0.2.23</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.13.RELEASE</version>
</dependency>
</dependencies>

<build>
<finalName>shiro2</finalName>
</build>
</project>
第五步:在src/main/resources下新建一个shiro-jdbc-realm.ini文件,内容如下:
[main]
dataSource=org.springframework.jdbc.datasource.DriverManagerDataSource
dataSource.driverClassName=com.mysql.jdbc.Driver
dataSource.url=jdbc:mysql://127.0.0.1:3306/shiro
dataSource.username=root
dataSource.password=12345678
jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm
jdbcRealm.permissionsLookupEnabled = true
jdbcRealm.dataSource=$dataSource
jdbcRealm.authenticationQuery = SELECT password FROM sec_user WHERE user_name = ?
securityManager.realms=$jdbcRealm

-------------

因为Realm采用了shiro默认的jdbcRealm,所以不需要自己再写Realm了,直接第六步写测试

-------------

第六步:在src/test/java下新建一个test包 ,包下建一个类JdbcRealmTest,代码如下:
-------------
package com.jintingbo.www;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.DisabledAccountException;
import org.apache.shiro.authc.ExcessiveAttemptsException;
import org.apache.shiro.authc.ExpiredCredentialsException;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.LockedAccountException;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;

public class MyTest {
public static void main(String[] args) {
// 1、获取 SecurityManager 工厂,此处使用 Ini 配置文件初始化 SecurityManager
Factory<org.apache.shiro.mgt.SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
// 2、得到 SecurityManager 实例 并绑定给 SecurityUtils
org.apache.shiro.mgt.SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager(securityManager);
// 3、得到 Subject 及创建用户名/密码身份验证 Token(即用户身份/凭证)
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken("li", "123");
try {
subject.login(token);
if(subject.isAuthenticated()){
System.out.println("成功!");
}else{
System.out.println("失败!");
}
subject.logout();
}catch (IncorrectCredentialsException e) {
System.out.println("登录密码错误. Password for account "
+ token.getPrincipal() + " was incorrect.");
} catch (ExcessiveAttemptsException e) {
System.out.println("登录失败次数过多");
} catch (LockedAccountException e) {
System.out.println("帐号已被锁定. The account for username "
+ token.getPrincipal() + " was locked.");
} catch (DisabledAccountException e) {
System.out.println("帐号已被禁用. The account for username "
+ token.getPrincipal() + " was disabled.");
} catch (ExpiredCredentialsException e) {
System.out.println("帐号已过期. the account for username "
+ token.getPrincipal() + "  was expired.");
} catch (UnknownAccountException e) {
System.out.println("帐号不存在. There is no user with username of "
+ token.getPrincipal());
}
}
}

第六步:运行;
完毕

shiro第四讲 JDBC Realm使用 (QQ14280784)相关推荐

  1. shiro第一讲 没有Realm的实例

     第一步:进入eclipse新建一个shiro的maven工程 第二步:修改shiro工程的编码为utf-8 第三步:加入pom中的内容 <dependencies> <depe ...

  2. JAVA设计模式第四讲:行为型设计模式

    设计模式(design pattern)是对软件设计中普遍存在的各种问题,所提出的解决方案.本文以面试题作为切入点,介绍了设计模式的常见问题.我们需要掌握各种设计模式的原理.实现.设计意图和应用场景, ...

  3. SLAM十四讲笔记1

    文章目录 ch02 初识SLAM ch02-01 经典视觉SLAM框架 ch02-02 SLAM问题的数学表述 ch03 三维空间刚体运动 ch03.01 旋转矩阵:点和向量,坐标系 01 向量a在线 ...

  4. C#精髓 第四讲 GridView 72般绝技

    说明:准备出一个系列,所谓精髓讲C#语言要点.这个系列没有先后顺序,不过尽量做到精.可能会不断增删整理,本系列最原始出处是csdn博客,谢谢关注. C#精髓 第四讲 GridView 72般绝技 作者 ...

  5. OC基础第四讲--字符串、数组、字典、集合的常用方法

    OC基础第四讲--字符串.数组.字典.集合的常用方法 字符串.数组.字典.集合有可变和不可变之分.以字符串为例,不可变字符串本身值不能改变,必须要用相应类型来接收返回值:而可变字符串调用相应地方法后, ...

  6. Javascript基础与面向对象基础~第四讲 Javascript中的类对象

    今天来说JS中如何实现类(class),事实上本应该昨天晚上写的,可我失言了,在些说一声"抱歉"!JS中的类是JS面向对象的基础,也是我最拿手的东西,你写的代码能否提高一个层次,一 ...

  7. 开发人员应该对IIS理论层的知识了解的多一些~第四讲 HttpModule中的几大事件

    本文主要介绍HttpModule,它在一个网页请求过程中是一个怎样的过程是我们要知道的,在网页加载过程中HttpModule在何时被执行也是我们要知道的,以及,HttpModule在网页请求过程中,所 ...

  8. linux自学视频资料第四讲:目录

    大家下午好! 今天linux自学视频第四讲:目录 这一讲大家要记住linux中的文件的权限(这在第三讲中有讲到)和目录的权限 首先大家要记住:u g o 这三个字母的定义  然后是 r w x 这三个 ...

  9. [概统]本科二年级 概率论与数理统计 第四讲 连续型随机变量

    [概统]本科二年级 概率论与数理统计 第四讲 连续型随机变量 连续型随机变量的基本概念 均匀分布 指数分布 正态分布 推导正态分布的密度(de Moivre-Laplace定理) 标准正态分布 一般的 ...

最新文章

  1. 字符编码_Windows资料
  2. 如何修改world 2007文档结构图的字体 ???
  3. Oracle创建序列的sql语句,【Oracle学习】之 序列(Sequence)
  4. 1022 词法分析程序总结
  5. SAP CRM One order里user status和system status的mapping逻辑
  6. 数据结构 - 单调栈、单调队列
  7. java使用内部类的好处及其初始化
  8. 【转载】 Single sign on
  9. RS485无线通讯模块工作原理详解
  10. RDCMan安装使用说明
  11. 计算机毕业设计ssm基于vue的健康餐饮管理系统的设计与实现
  12. 深度学习安装笔记(二)显卡、显卡驱动、CUDA 的关系以及显卡驱动升级
  13. vue中json数据格式化
  14. Fxfactory插件:复古电影调色插件Sheffield Softworks Vintage
  15. 成功安装python后、在dos命令行窗口中-python在WIN运行时去掉DOS窗口显示的方法
  16. 用python编阶层
  17. 【主色提取】模糊C均值(FCM )聚类算法和彩色图像快速模糊C均值( CIQFCM )聚类算法
  18. 简单python脚本实例画图-Python使用matplotlib简单绘图示例
  19. 2022王道考研系列复习指导书更新及勘误
  20. 十大B2C网站购物车的流程设计对比分析

热门文章

  1. 学习之路,复习篇-C基础
  2. 使用Springboot异步发送模板邮件完成注册功能
  3. 2020年司钻(井下)考试APP及司钻(井下)考试申请表
  4. 企业级项目实战讲解!微信小程序趋势及前景,复习指南
  5. 背景音乐与(消防)紧急广播的切换
  6. 【luogu P4320】道路相遇(圆方树)
  7. Heat equation
  8. 从Linux 服务器拷贝文件到Windows 本地
  9. Java检查字符串包含多个关键词
  10. Permutation Feature Importance