• 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
  • 相关阅读:
    【AGC】【FAQ】Dynamic Ability常见问题
    OptiFDTD应用:用于光纤入波导耦合的硅纳米锥仿真
    Linux—搭建Apache(httpd)服务
    蓬莱enclave TEE编译和运行说明
    【大厂面试重点(程序环境和预处理以及C语言不能函数重载但C++却可以的原理分析)】
    项目经验分享:实现一个昇思MindSpore 图层 IR 融合优化 pass
    JS中的构造函数
    本地vscode安装GPU版本PyTorch
    十四、使用 Vue Router 开发单页应用(3)
    算法训练Day36 贪心算法系列 - 重叠区间问题 | LeetCode435. 无重叠区间;763. 划字母区间;56.合并区间
  • 原文地址:https://blog.csdn.net/m0_55070913/article/details/126496467