更新時間:2020-08-04 來源:黑馬程序員 瀏覽量:
【1】基本流程
流程如下:
1、Shiro把用戶的數(shù)據(jù)封裝成標(biāo)識token,token一般封裝著用戶名,密碼等信息;
2、使用Subject門面獲取到封裝著用戶的數(shù)據(jù)的標(biāo)識token;
3、Subject把標(biāo)識token交給SecurityManager,在SecurityManager安全中心中,SecurityManager把標(biāo)識token委托給認(rèn)證器;Authenticator進(jìn)行身份驗證。認(rèn)證器的作用一般是用來指定如何驗證,它規(guī)定本次認(rèn)證用到哪些Realm;
4、認(rèn)證器Authenticator將傳入的標(biāo)識token,與數(shù)據(jù)源Realm對比,驗證token是否合法。
【2.1】需求
使用shiro完成一個用戶的登錄
【2.2】實現(xiàn)
【2.2.1】新建項目
shiro-day01-01authenticator
【2.2.2】導(dǎo)入依賴
<?xml version="1.0" encoding="UTF-8"?>
<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.itheima.shiro</groupId>
<artifactId>shiro-day01-01authenticator</artifactId>
<version>1.0-SNAPSHOT</version>
<name>shiro-day01-01authenticator</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- compiler插件, 設(shè)定JDK版本 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>8</source>
<target>8</target>
<showWarnings>true</showWarnings>
</configuration>
</plugin>
</plugins>
</build>
</project>
【2.2.3】編寫shiro.ini
#聲明用戶賬號
[users]
jay=123
【2.2.4】編寫HelloShiro
package com.itheima.shiro;
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.apache.shiro.util.Factory;
import org.junit.Test;
/**
* @Description:shiro的第一個例子
*/
public class HelloShiro {
@Test
public void shiroLogin() {
//導(dǎo)入權(quán)限ini文件構(gòu)建權(quán)限工廠
Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
//工廠構(gòu)建安全管理器
SecurityManager securityManager = factory.getInstance();
//使用SecurityUtils工具生效安全管理器
SecurityUtils.setSecurityManager(securityManager);
//使用SecurityUtils工具獲得主體
Subject subject = SecurityUtils.getSubject();
//構(gòu)建賬號token
UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken("jay", "123");
//登錄操作
subject.login(usernamePasswordToken);
System.out.println("是否登錄成功:" + subject.isAuthenticated());
}
}
【2.2.4】測試
【2.3】小結(jié)
(1)權(quán)限定義:ini文件
(2)加載過程:
導(dǎo)入權(quán)限ini文件構(gòu)建權(quán)限工廠;
工廠構(gòu)建安全管理器;
使用SecurityUtils工具生效安全管理器;
使用SecurityUtils工具獲得主體;
使構(gòu)建賬號token用SecurityUtils工具獲得主體;
構(gòu)建賬號token;
登錄操作。
猜你喜歡:
系統(tǒng)權(quán)限授權(quán)和授權(quán)邏輯流程