Shiro教程--Authentication身份验证及JDBC Realm域(三)

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();

}

}

猜你喜欢

转载自blog.csdn.net/weixin_38964895/article/details/81099186