博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一头扎进Shiro-身份认证
阅读量:3979 次
发布时间:2019-05-24

本文共 2578 字,大约阅读时间需要 8 分钟。

   在中介绍了将用户信息保存在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数据库连接池的依赖:

4.0.0
com.shiro
Shiro01
0.0.1-SNAPSHOT
Shiro01
org.apache.shiro
shiro-core
1.2.4
org.slf4j
slf4j-log4j12
1.7.12
c3p0
c3p0
0.9.1.2
commons-logging
commons-logging
1.2
mysql
mysql-connector-java
5.1.37
   
   然后
我们创建jdbc_realm.ini文件,用于配置jdbcRealm:
[main]jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealmdataSource=com.mchange.v2.c3p0.ComboPooledDataSourcedataSource.driverClass=com.mysql.jdbc.DriverdataSource.jdbcUrl=jdbc:mysql://localhost:3306/db_shirodataSource.user=rootdataSource.password=rootjdbcRealm.dataSource=$dataSourcesecurityManager.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
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的身份认证。

你可能感兴趣的文章
DPDK 使用网卡ip/tcp/udp checksum offload
查看>>
dpdk 调试(log)小结(终端打印或是输出到文件)
查看>>
dpvs 连接会话老化处理逻辑
查看>>
堆原理与c实现
查看>>
Ethertype
查看>>
dpdk cache 总结
查看>>
6. Mempool Library
查看>>
28.Multi-process Support
查看>>
28. Multi-process Sample Application
查看>>
DPDK 多进程支持总结
查看>>
44. Building Your Own Application
查看>>
37. Vhost Library
查看>>
41. Development Kit Build System
查看>>
42. Development Kit Root Makefile Help
查看>>
43. Extending the DPDK
查看>>
22. Packet Distributor Library
查看>>
7. Mbuf Library
查看>>
树莓派总结
查看>>
ovs patch port总结
查看>>
MIRANTIS openstack 老版本中设置自动进入fuelmenu
查看>>