首頁技術(shù)文章正文

Shiro入門教程:如何實現(xiàn)身份認(rèn)證?

更新時間:2020-08-04 來源:黑馬程序員 瀏覽量:

1、身份認(rèn)證

【1】基本流程

1596520320960_Shiro入門:身份認(rèn)證封面.jpg

流程如下:

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、案例演示

【2.1】需求

使用shiro完成一個用戶的登錄

【2.2】實現(xiàn)

【2.2.1】新建項目
shiro-day01-01authenticator

1596520194957_Shiro入門:身份認(rèn)證02.jpg

【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】測試

1596520223591_Shiro入門:身份認(rèn)證03.jpg


【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;

登錄操作。

猜你喜歡:

shiro是啥?Shiro的核心組件介紹

系統(tǒng)權(quán)限授權(quán)和授權(quán)邏輯流程

用戶身份認(rèn)證流程



分享到:
在線咨詢 我要報名
和我們在線交談!