一头扎进Shiro-身份认证

   在《一头扎进Shiro-HelloWorld》中介绍了将用户信息保存在Subject认证主体,用shiro.ini模拟数据库记录用户名、密码信息完成验证的过程,这篇文章我们将讲解如何通过Realm完成shiro的身份验证。

   首先我们介绍下Subject认证主体。

   Subject认证主体包含两个信息:
   Principals:身份,可以是用户名,邮件,手机号码等等,用来标识一个登录主体身份;
   Credentials:凭证,常见有密码,数字证书等等;

   然后我们通过下图了解下shiro的身份认证流程。

 

   在过程5中,我们介绍shiro的realm机制。

   Realm:意思是域,Shiro从 Realm中获取验证数据;
   Realm 有很多种类,例如常见的jdbc realm,jndi realm,text realm。这篇文章我们主要介绍jdbcRealm。

   接着我们需要在项目的pom文件中添加对mysql连接驱动和c3p0数据库连接池的依赖:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.shiro</groupId>
	<artifactId>Shiro01</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>Shiro01</name>
	<dependencies>
		<dependency>
			<groupId>org.apache.shiro</groupId>
			<artifactId>shiro-core</artifactId>
			<version>1.2.4</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.7.12</version>
		</dependency>
		<dependency>
			<groupId>c3p0</groupId>
			<artifactId>c3p0</artifactId>
			<version>0.9.1.2</version>
		</dependency>
		<dependency>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
			<version>1.2</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.37</version>
		</dependency>
	</dependencies>
</project>
       然后 我们创建jdbc_realm.ini文件,用于配置jdbcRealm:
[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
       最后我们通过main方法测试jdbcRealm连接:
package com.tgb.shiro;

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 JdbcRealmRest {

	public static void main(String[] args) {
		// 初始化SecurityFactory工厂
		Factory<SecurityManager> factory = new IniSecurityManagerFactory(
				"classpath:jdbc_realm.ini");
		// 获取SessionFactory实例
		SecurityManager securityManager = factory.getInstance();
		// 把SecurityManager实例绑定到SecurityUtils
		SecurityUtils.setSecurityManager(securityManager);
		// 获得当前执行的用户
		Subject currentUser = SecurityUtils.getSubject();
		// 创建token令牌,用户名/密码
		UsernamePasswordToken token = new UsernamePasswordToken("java1234",
				"123456");
		try {
			//身份认证
			currentUser.login(token);
			System.out.println("身份认证成功!");
		} catch (AuthenticationException e) {
			e.printStackTrace();
			System.out.println("身份认证失败!");
		}
	}
}
          至此,我们完成了shiro的jdbcRealm的身份认证。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值