Shiro学习笔记(二)
首先还是先搭建工程运行环境 依旧搭建的是Maven工程,如果不是Maven 也可以去网上找jar包然后导入
(我使用Maven主要是找依赖配置文件就行,我自己导jar包的时候就是很容易报错)
还是先上传一张工程目录图
主要的文件就是这两个,一个是配置的,一个是用来进行测试的
jdbc_realm.ini配置文件中的内容如下
[main] jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm dataSource=com.mchange.v2.c3p0.ComboPooledDataSource dataSource.driverClass=com.mysql.jdbc.Driver dataSource.jdbcUrl=jdbc:mysql://localhost:3306/db_shiro dataSource.user=root dataSource.password=root jdbcRealm.dataSource=$dataSource securityManager.realms=$jdbcRealm
TestJdbc_realm.java文件中的内容如下
package com.zuoyan.shiro; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.IncorrectCredentialsException; import org.apache.shiro.authc.UnknownAccountException; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.config.IniSecurityManagerFactory; import org.apache.shiro.mgt.SecurityManager; import org.apache.shiro.subject.Subject; import org.apache.shiro.util.Factory; import org.junit.Test; public class TestJdbcRealm { @Test public void testJdbcRealm() { Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:jdbc_realm.ini"); SecurityManager securityManager= factory.getInstance(); // 把 securityManager 的实例绑定到 SecurityUtils 上 SecurityUtils.setSecurityManager(securityManager); // 得到当前执行的用户 Subject currentUser = SecurityUtils.getSubject(); // 自己创建一个令牌 UsernamePasswordToken token = new UsernamePasswordToken("zuoyan123","zuoyan123"); 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(); } } }
还有就是数据库中的users表的内容
当查找的用户名在数据库中不存在的情况下,运行的结果如下
当用户名能和数据库对应上,而密码不对的话的情况如下
用户名和密码都正确的情况下,
对了,最后还有数据库创建的代码
/* SQLyog Ultimate v11.33 (64 bit) MySQL - 5.1.49-community : Database - db_shiro ********************************************************************* */ /*!40101 SET NAMES utf8 */; /*!40101 SET SQL_MODE=''*/; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; CREATE DATABASE /*!32312 IF NOT EXISTS*/`db_shiro` /*!40100 DEFAULT CHARACTER SET utf8 */; USE `db_shiro`; /*Table structure for table `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, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; /*Data for the table `users` */ insert into `users`(`id`,`userName`,`password`) values (1,'zuoyan','zuoyan123'); /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;