Shiro学习之JdbcRealm

来源:互联网 发布:nginx限制返回大小 编辑:程序博客网 时间:2024/06/05 08:01

JDBC Realm使用
1、数据库及依赖

<dependencies>        <dependency>            <groupId>org.apache.shiro</groupId>            <artifactId>shiro-core</artifactId>            <version>1.2.2</version>        </dependency>        <dependency>            <groupId>c3p0</groupId>            <artifactId>c3p0</artifactId>            <version>0.9.1.2</version>        </dependency>        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>            <version>5.1.25</version>        </dependency>        <dependency>            <groupId>org.gatein.common</groupId>            <artifactId>common-logging</artifactId>            <version>2.2.2.Final</version>        </dependency>        <dependency>            <groupId>commons-logging</groupId>            <artifactId>commons-logging-api</artifactId>            <version>1.1</version>        </dependency>    </dependencies>

本文将使用mysql数据库及c3p0连接池;
2、到数据库shiro下建三张表:users(用户名/密码)

DROP TABLE IF EXISTS `users`;CREATE TABLE `users` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `userName` varchar(255) DEFAULT NULL,  `password` varchar(255) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;

并插入一条数据(1,yyt,123)
3、ini配置(shiro_JDBC.ini)

[main]#声明一个realmjdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm#声明一个数据库连接池 并设置好参数dataSource=com.mchange.v2.c3p0.ComboPooledDataSourcedataSource.driverClass=com.mysql.jdbc.DriverdataSource.jdbcUrl=jdbc:mysql://localhost:3306/shirodataSource.user=rootdataSource.password=kingdee#将dataSource设置给jdbcRealmjdbcRealm.dataSource=$dataSource#将jdbcRealm设置给securityManager.realmssecurityManager.realms=$jdbcRealm

配置意思解释:

  • 变量名=全限定类名会自动创建一个类实例
  • 变量名.属性=值 自动调用相应的setter方法进行赋值
  • $变量名 引用之前的一个对象实例

测试代码:

package com.kingsky;import org.apache.shiro.SecurityUtils;import org.apache.shiro.authc.AuthenticationException;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;public class JdbcShiro {    public static void main(String[] args) {        //读取配置文件,初始化SecurityManager工厂        Factory<SecurityManager> factory=new IniSecurityManagerFactory("classpath:shiro_JDBC.ini");        //获取到SecurityManager实例        SecurityManager securityManager=factory.getInstance();        //把SecurityManager绑定到SecurityUtils中        SecurityUtils.setSecurityManager(securityManager);        //得到当前用户        Subject subject=SecurityUtils.getSubject();        //创建Token令牌,用户名/密码        UsernamePasswordToken passwordToken=new UsernamePasswordToken("yyt", "123");        //验证登录  会抛出异常        try {            subject.login(passwordToken);            System.out.println("身份验证成功!!!");        } catch (AuthenticationException e) {            e.printStackTrace();            System.out.println("身份验证失败!!!!");        }        //退出登录        subject.logout();    }}

查看控制台输出,输入验证成功

0 0