ICode9

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

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

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

标签: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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

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

ICode9版权所有