首页技术文章正文

Shiro入门教程:如何实现身份认证?

更新时间:2020-08-04 来源:黑马程序员 浏览量:

1、身份认证

【1】基本流程

1596520320960_Shiro入门:身份认证封面.jpg

流程如下:

1、Shiro把用户的数据封装成标识token,token一般封装着用户名,密码等信息;

2、使用Subject门面获取到封装着用户的数据的标识token;

3、Subject把标识token交给SecurityManager,在SecurityManager安全中心中,SecurityManager把标识token委托给认证器;Authenticator进行身份验证。认证器的作用一般是用来指定如何验证,它规定本次认证用到哪些Realm;

4、认证器Authenticator将传入的标识token,与数据源Realm对比,验证token是否合法。

2、案例演示

【2.1】需求

使用shiro完成一个用户的登录

【2.2】实现

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

1596520194957_Shiro入门:身份认证02.jpg

【2.2.2】导入依赖

<?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插件, 设定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() {

        //导入权限ini文件构建权限工厂

        Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");

        //工厂构建安全管理器

        SecurityManager securityManager = factory.getInstance();

        //使用SecurityUtils工具生效安全管理器

        SecurityUtils.setSecurityManager(securityManager);

        //使用SecurityUtils工具获得主体

        Subject subject = SecurityUtils.getSubject();

        //构建账号token

        UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken("jay", "123");

        //登录操作

        subject.login(usernamePasswordToken);

        System.out.println("是否登录成功:" + subject.isAuthenticated());

    }

}

【2.2.4】测试

1596520223591_Shiro入门:身份认证03.jpg


【2.3】小结

(1)权限定义:ini文件

(2)加载过程:

导入权限ini文件构建权限工厂;

工厂构建安全管理器;

使用SecurityUtils工具生效安全管理器;

使用SecurityUtils工具获得主体;

使构建账号token用SecurityUtils工具获得主体;

构建账号token;

登录操作。

猜你喜欢:

shiro是啥?Shiro的核心组件介绍

系统权限授权和授权逻辑流程

用户身份认证流程



分享到:
在线咨询 我要报名
和我们在线交谈!