ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Springboot2.x整合 Apache Shiro快速上手测试

2022-01-25 15:06:24  阅读:56  来源: 互联网

标签:realm Springboot2 shiro Apache org subject SecurityUtils Shiro Subject


Springboot2.x整合 Apache Shiro快速上手实战

环境 :Maven + Jdk8 + Springboot 2.X + IDEA (Eclipse也可以)

1创建SpringBoot项目

	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-test</artifactId>
		<scope>test</scope>
	</dependency>
	
	<dependency>
		<groupId>com.alibaba</groupId>
		<artifactId>druid</artifactId>
		<version>1.1.6</version>
	</dependency>
		<!--整合Shiro相关jar包  主要就学这个-->
	<dependency>
		<groupId>org.apache.shiro</groupId>
		<artifactId>shiro-spring</artifactId>
		<version>1.4.0</version>
	</dependency>








2、完成shior的步骤

  • 1 构建环境
  • 2 调用 Subject.login() 执行认证
  • 3 SecurityManager 进行认证
  • 4 Authenticator执行认证
  • 5 根据Realm进行验证

3、新建一个测试类

package com.lx.shior;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.realm.SimpleAccountRealm;
import org.apache.shiro.subject.Subject;
import org.junit.Before;
import org.junit.Test;

public class ShiorTest {

    /*步骤
     * 1  构建环境
     * 2 调用 Subject.login() 执行认证
     * 3 SecurityManager 进行认证
     * 4 Authenticator执行认证
     * 5 根据Realm进行验证
     * */
	// 定义realm  数据域,Shiro和安全数据的连接器,好比jdbc连接数据库; 通过realm获取认证授权相关信息
    private SimpleAccountRealm realm = new SimpleAccountRealm();
    //先创建SecurityManger环境,手动添加个Reals到创建SecurityManger环境中
    private DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();


    @Before
    public void init() {
        //给它加上账号密码模仿从数据库获取到账号密码
        realm.addAccount("admin", "123");
        realm.addAccount("user1", "456");
        defaultSecurityManager.setRealm(realm);
    }

    @Test
    public void contextLoads() {
        /*
        SecurityUtils是一个抽象的工具类,提供了SecurityManager实例的保存和获取方法,以及创建Subject的方法。
        SecurityUtils提供了getSecurityManager()和setSecurityManager方法,还有个特殊的方法getSubject(),这是获取主体的最有效的途径
        */
        SecurityUtils.setSecurityManager(defaultSecurityManager);

        // Subject  导入shiro的包 import org.apache.shiro.subject.Subject;
        //下面是用户的输入账号密码
        Subject subject = SecurityUtils.getSubject();
        //获取到token
        UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken("admin", "123");

        subject.login(usernamePasswordToken);

        System.out.println("查看认证结果:" + subject.isAuthenticated());


    }
}

在这里插入图片描述

4、其他的方法



    @Before
    public void init() {
        // 第1一个参数账号  第2个参数密码   第3个参数超级管理员  第4个参数普通管理员
        realm.addAccount("admin", "123","root","admin");
        realm.addAccount("user1", "456");
        defaultSecurityManager.setRealm(realm);
    }
	@Test
    public void contextLoads() {
        /*
        SecurityUtils是一个抽象的工具类,提供了SecurityManager实例的保存和获取方法,以及创建Subject的方法。
        SecurityUtils提供了getSecurityManager()和setSecurityManager方法,还有个特殊的方法getSubject(),这是获取主体的最有效的途径
        */
        SecurityUtils.setSecurityManager(defaultSecurityManager);

        // Subject  导入shiro import org.apache.shiro.subject.Subject;
        //下面是用户的输入账号密码
        Subject subject = SecurityUtils.getSubject();
        //获取到token
        UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken("admin", "123");

        subject.login(usernamePasswordToken);

        System.out.println("查看认证结果:" + subject.isAuthenticated());
        //是否有对应的角色

        System.out.println("是否有对应的角色:" +  subject.hasRole("root"));
        //获取subject名
        System.out.println("获取用户名:" +  subject.getPrincipal());

        //检查是否有对应的角色
        System.out.println("检查是否有对应的角色:"+ subject.hasRole("admin"));

        //检查是否有对应的角色,无返回值,直接在SecurityManager里面进行判断
        subject.checkRole("admin");

        //退出登录
        subject.logout();

    }

在这里插入图片描述

以上是Springboot2.x整合 Apache Shiro快速上手测试类,要是有什么问题请写在评论区

标签:realm,Springboot2,shiro,Apache,org,subject,SecurityUtils,Shiro,Subject
来源: https://blog.csdn.net/MagicChild/article/details/122685118

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有