http://shiro.apache.org/authentication.html
******一 身份验证Authentication******
通过上图需要了解的与元素:
一 Subject认证主体所包含的主要信息
1-Principals:身份(用户名,邮件,手机号码等,标识一个登陆主体身份)
2-Credentials:凭证(密码,数字证书等)
二 Realm&&JDBC Realm
Realm [relm]:域(译:王国,范围,领域),Shiro 从 Realm 中获取验证数据;
Realm 有很多种类,例如常见的 jdbc realm,jndi realm,text realm。
之前的案例中我们都是应用了text realm
实际项目中我们使用jdbc realm较多,提升保密级别
******JdbcRealm应用演示******
Maven
Shiro
演示代码
<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.company.shiro</groupId> <artifactId>shirodemo1</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.25</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.2</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency> </dependencies> </project> |
[main] #声明变量jdbcRealm jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm #创建数据源datasource 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中,注意,已定义变量使用$作为前缀 jdbcRealm.dataSource=$dataSource #应用jdbcRealm变量完成对securityManager的配置 securityManager.realms=$jdbcRealm |
package com.company.shiro; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.AuthenticationToken; 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.slf4j.Logger; import org.slf4j.LoggerFactory; public class ShiroRealm { public static final Logger log = LoggerFactory.getLogger(ShiroRealm.class);//获取Logger日志对象 public static void main(String[] args) { //1-创建SecurityManager安全管理器对象,读取shiro配置文件信息 SecurityManager securityManager = new IniSecurityManagerFactory("classpath:realm_shiro.ini").getInstance(); SecurityUtils.setSecurityManager(securityManager);//2-配置安全管理工具SecurityUtil Subject authenSubject = SecurityUtils.getSubject();//3-获得Subject对象 //4-获取Token令牌 AuthenticationToken successToken = new UsernamePasswordToken("scott", "tiger");//成功 // AuthenticationToken errorToken = new UsernamePasswordToken("scott111", "tiger");//失败 log.info("principal:"+successToken.getPrincipal());//身份--用户名 log.info("credential:"+successToken.getCredentials());//凭证--密码 try { authenSubject.login(successToken); log.info("login success!"); } catch (Exception e) { e.printStackTrace(); log.error("login error!"); } authenSubject.logout(); } } |