Shiro默认使用自带的IniRealm,IniRealm从ini配置文件中读取用户的信息。
大部分情况下需要从系统的数据库中读取用户信息,所以需要使用JDBCRealm或自定义Realm
6.1 实现一(使用JDBCRealm提供数据源,从而实现认证):
1) 在数据库中建立users表
JdbcRealm默认查找的表名为users,用户名为username,密码password
2)jar文件
3)shiro文件(src目录下)
[main]
#配置数据源
dataSource = com.mchange.v2.c3p0.ComboPooledDataSource
dataSource.driverClass = com.mysql.jdbc.Driver
dataSource.jdbcUrl = jdbc:mysql://localhost:3306/shiro-realm?useUnicode=true&characterEncoding=utf8
#dataSource.jdbcUrl = jdbc:mysql:///shiro-realm?useUnicode=true&characterEncoding=utf8
#数据库账户名
dataSource.user = root
#数据库连接密码
dataSource.password = 0100
#配置Realm,并为Realm注入数据源信息,JdbcRealm默认查找的表名为users,用户名为username,密码password
jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm
jdbcRealm.dataSource = $dataSource
#注入Realm
securityManager.realm = $jdbcRealm
4)测试
package com.sxt.test;
import org.apache.shiro.SecurityUtils;
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.junit.Test;
/*
* 实现简单认证
*/
public class TestAuthentication {
@Test
public void TestLogin(){
// 1. 构建SecurityManager工厂
IniSecurityManagerFactory securityManagerFactory = new IniSecurityManagerFactory("classpath:shiro.ini");
// 2. 通过securityManagerFactory工厂获取SecurityManager实例
SecurityManager securityManager = securityManagerFactory.getInstance();
// 3. 将securityManager设置到运行环境当中
SecurityUtils.setSecurityManager(securityManager);
// 4. 获取subject实例
Subject subject = SecurityUtils.getSubject();
// 5. 创建用户名密码验证令牌Token
UsernamePasswordToken token = new UsernamePasswordToken("v