您的位置:首页 > 数据库

第二章----3,使用数据库作为数据源

2018-01-26 15:13 197 查看
 之前把用户名密码配置到了shiro.ini这些配置文件中,现在把它们放到数据库中。

我们的做法就是在配置文件中 使用支持数据库的数据源Realm, 就是JdbcRealm。

现在只是简单的判断一下登录的帐号和密码,因此数据库的表很简单,

数据库的名字是shiro,表名是users



 来验证吧,源码在本博客最早的一章已经给了。
首先是jdbc.ini配置文件,如果你用过Spring,下面的注册每个类的属性其实很好理解,在最后注入的是合作者Bean
[main]
#这里可以视为伪代码,右边是一个类的类名,左边是这个类的一个对象。
#比如现在,就可以看做是创建了一个JdbcRealm类的一个对象jdbcRealm
jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm
#注入对象的属性
#创建数据源对象,就像在Spring配置文件中创建dataSource一样
dataSource=com.alibaba.druid.pool.DruidDataSource
dataSource.driverClassName=com.mysql.jdbc.Driver
dataSource.url=jdbc:mysql://localhost:3306/shiro
dataSource.username=root
#密码每个电脑不一样
dataSource.password=
#注入合作者Bean
#把dataSource注入到jdbcRealm中去
jdbcRealm.dataSource=$dataSource
#把jdbcRealm注入到安全中心中
securityManager.realms=$jdbcRealm

测试
@Test
public void test3() {
//加载配置文件,并获取工厂,这个SecurityManager可能与java.lang包下的SecurityManager冲突,因此加上泛型
Factory<org.apache.shiro.mgt.SecurityManager> factory = new IniSecurityManagerFactory("classpath:jdbc.ini");
//获取shiro的核心SecurityManager对象
org.apache.shiro.mgt.SecurityManager sm = factory.getInstance();
//将安全管理者SecurityManager放入全局对象SecurityUtils
SecurityUtils.setSecurityManager(sm);
//全局对象用SecurityManager来生成与用户交互的Subject对象
Subject subject = SecurityUtils.getSubject();
//封装用户的数据
UsernamePasswordToken token = new UsernamePasswordToken("jay", "123");
//将封装用户的标识token 与 数据源 进行对比认证
subject.login(token);
//判断本帐号是否已经被认证
Assert.assertEquals(true, subject.isAuthenticated());
}

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: