Shiro学习之JdbcRealm

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]
#声明一个realm
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/shiro
dataSource.user=root
dataSource.password=kingdee
#将dataSource设置给jdbcRealm
jdbcRealm.dataSource=$dataSource
#将jdbcRealm设置给securityManager.realms
securityManager.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();

    }
}

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

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值