• shiro的实现认证


    1,基本概念

    1,身份验证

        即在应用中谁能证明他就是他本人。一般提供如他们的身份ID 一些标识信息来 
    
    • 1

    表明他就是他本人,如提供身份证,用户名/密码来证明。

        在 shiro 中,用户需要提供principals (身份)和credentials(证明)给shiro,从而应用能 
    
    • 1

    验证用户身份:

    2,principals 【/'prnspl】

        身份,即主体的标识属性,可以是任何东西,如用户名、邮箱等,唯一即可。 
    
    • 1

    一个主体可以有多个principals,但只有一个Primary principals,一般是用户名/密码/手机号。

    3,credentials 【/kr’dnlz/】

        证明/凭证,即只有主体知道的安全值,如密码/数字证书等。 
    
        最常见的principals和credentials组合就是用户名/密码了。接下来先进行一个基本的身份认证。
    
    • 1
    • 2
    • 3

    2,认证流程

    在这里插入图片描述

    其它就是使用Shrio的认证来取代我们传统的登陆方式
    3,入门程序实现认证

    1,创建项目shiro_login的maven项目
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    2,在pom.xml中导入jar

     
                org.apache.shiro
                shiro-core
                1.3.2
            
            
                commons-logging
                commons-logging
                1.2
            
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3,log4j.properties日志配置文件

    log4j.rootLogger=debug, stdout
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m %n
    
    • 1
    • 2
    • 3
    • 4

    4,在src /java/resources下新建shiro.ini文件

    【目地是使用配置文件初始化认证环境】

    [users]
    zhangsan=1111
    lisi=1111
    
    • 1
    • 2
    • 3

    3,编写代码,实现认证

    public static void main(String[] args) {
            // 1.创建securityManager工厂 SecurityManager JDK也有这个类,在java.lang包 注意不要使用jdk里面那个类
            Factory factory = new IniSecurityManagerFactory("classpath:shiro.ini");
            // 2.创建securityManager
            SecurityManager securityManager = factory.getInstance();
            // 3.将securityManager绑定到运行环境
            SecurityUtils.setSecurityManager(securityManager);
            // 4.创建主体 只要线程不变,Subject不变
            Subject subject = SecurityUtils.getSubject();
            // 5.创建token用于认证 客户端传递过来的用户名和密码
            UsernamePasswordToken token = new UsernamePasswordToken("zhangsan", "123");
            // 6.登录(认证)
            try {
                subject.login(token);
                System.out.println("登录成功");
            } catch (IncorrectCredentialsException e) {
                System.out.println("密码不正确");
            }catch (UnknownAccountException e) {
                System.out.println("没有这个帐号");
            }catch (AuthenticationException e) {
                e.printStackTrace();
            }
            System.out.println("认证状态:" + subject.isAuthenticated());
            //7,断言用户已经登录
            Assert.assertEquals(true, subject.isAuthenticated()); 
            //8,退出   退出之后相关于web项目的session对象注销
            subject.logout();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
  • 相关阅读:
    一文弄懂TypeScript中的混合(Mixin)
    导入jdk源码并进行使用
    《向量数据库指南》——AI原生向量数据库Milvus Cloud 2.3新功能
    opengles 绘制图元 ——glDrawArrays() 相关API介绍 (十)
    十大跑步运动耳机品牌排行榜,值得推荐的六款运动耳机
    Ansible+Shell+Containerd部署k8s
    神经网络收敛是什么意思,算法的收敛速度的计算
    银行ATM系统
    上机练习 8: DataFrame 综合练习
    494.目标和·深度优先搜索·背包问题
  • 原文地址:https://blog.csdn.net/m0_55070913/article/details/126496467