打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
shiro安全框架

青柠果

于 2022-08-03 22:04:20 

目录

1.shiro安全框架

1.1 什么是权限管理

1.2 什么是身份认证

1.3 什么是授权

1.4 认证授权框架有哪些

2.使用shiro完成认证工作

2.1 shiro中认证的关键对象

2.2 认证流程

2.3 项目代码

2.3.1 依赖

2.3.2 创建ini文件

2.3.3 测试代码

2.4 认证的原理

3.授权

 3.1 修改ini文件

3.2 修改代码


1.shiro安全框架

        Apache Shiro 是一个强大易用的 Java 安全框架,提供了认证、授权、加密和session会话管理等功能,对于任何一个应用程序,Shiro 都可以提供全面的安全管理服务。并且相对于其他安全框架spring security,Shiro 要简单的多。

        Shiro是apache旗下一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权、加密、会话管理等功能,组成了一个通用的安全认证框架。

        Shiro可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE环境,也可以用在JavaEE环境。Shiro可以帮助我们完成:认证、授权、加密、会话管理、与Web集成、缓存等。

1.1 什么是权限管理

        基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源。

        权限管理包括用户身份认证和授权两部分,简称认证授权。对于需要访问控制的资源用户首先经过身份认证,认证通过后用户具有该资源的访问权限方可访问。

1.2 什么是身份认证

        身份认证,就是判断一个用户是否为合法用户的处理过程。最常用的简单身份认证方式是系统通过核对用户输入的用户名和口令,看其是否与系统中存储的该用户的用户名和口令一致,来判断用户身份是否正确。对于采用指纹等系统,则出示指纹;对于硬件Key等刷卡系统,则需要刷卡。

1.3 什么是授权

        授权,即访问控制,控制谁能访问哪些资源。主体进行身份认证后需要分配权限方可访问系统的资源,对于某些资源没有权限是无法访问的 .

1.4 认证授权框架有哪些

        shiro框架和spring security框架 这款框架是现在市面比较流行。

2.使用shiro完成认证工作

2.1 shiro中认证的关键对象

        Subject:主体访问系统的用户,主体可以是用户、程序等,进行认证的都称为主体;

        Principal:身份信息----账号是主体(subject)进行身份认证的标识,标识必须具有唯一性,如用户名、手机号、邮箱地址等,一个主体可以有多个身份,但是必须有一个主身份(Primary Principal)。

        credential:凭证信息---密码是只有主体自己知道的安全信息,如密码、证书等。

2.2 认证流程

2.3 项目代码

1.先不用数据库来进行身份认证,--我们ini文件,window系统文件,该文件中可以存放账号和密码。

(1) 创建一个maven java工程

2.3.1 依赖

 <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-core</artifactId>
            <version>1.9.0</version>
        </dependency>

2.3.2 创建ini文件

2.3.3 测试代码

public class Test01 {
    public static void main(String[] args) {
        //1.获取SecurityManager对象
        DefaultSecurityManager securityManager=new DefaultSecurityManager();
        //2.读取ini文件
        IniRealm iniRealm=new IniRealm("classpath:shiro.ini");
        //3。设置securityManager的realm
        securityManager.setRealm(iniRealm);
        //4.设置securityManager上下文生效
        SecurityUtils.setSecurityManager(securityManager);

        //5.获取subject的主体对象
        Subject subject=SecurityUtils.getSubject();
        try{
            //UsernamePasswordToken作用是封装你输入的账号和密码 是客户自己输入的 用来进行比较与realm
            UsernamePasswordToken token=new UsernamePasswordToken("admin","123456");
            //抛出异常 比对shiro中realm和自己的对比,如果一致则登录成功,不一致则登录失败
            subject.login(token);
            System.out.println("登陆成功");
        }catch(Exception e){
            e.printStackTrace();
            System.out.println("登陆失败");
        }
       
    }
}

2.4 认证的原理

        Subject: 主题 登录信息提交给SecurityManager --->认证器Authenticator---->根据你的realm提供的数据进行相关的认证。 realm---与数据源交互的类。

3.授权

 3.1 修改ini文件

3.2 修改代码

public class Test01 {
    public static void main(String[] args) {
        //1.获取SecurityManager对象
        DefaultSecurityManager securityManager=new DefaultSecurityManager();
        //2.读取ini文件
        IniRealm iniRealm=new IniRealm("classpath:shiro.ini");
        //3。设置securityManager的realm
        securityManager.setRealm(iniRealm);
        //4.设置securityManager上下文生效
        SecurityUtils.setSecurityManager(securityManager);

        //5.获取subject的主体对象
        Subject subject=SecurityUtils.getSubject();
        try{
            //UsernamePasswordToken作用是封装你输入的账号和密码 是客户自己输入的 用来进行比较与realm
            UsernamePasswordToken token=new UsernamePasswordToken("admin","123456");
            //抛出异常 比对shiro中realm和自己的对比,如果一致则登录成功,不一致则登录失败
            subject.login(token);
            System.out.println("登陆成功");
        }catch(Exception e){
            e.printStackTrace();
            System.out.println("登陆失败");
        }
        System.out.println("=========================登陆后===========================");
        boolean authenticated = subject.isAuthenticated();
        if(authenticated){
            //判断当前登录者是否具有user:query权限
            boolean permitted = subject.isPermitted("user:update");
            System.out.println(permitted);
            //从角色角度
            boolean role1 = subject.hasRole("role1");
            System.out.println(role1);
        }else {
            System.out.println("请先认证");
        }
    }
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
第四章:Shiro的身份认证(Authentication)
JAVAWEB开发之权限管理(二)
InfoQ: 让Apache Shiro保护你的应用
权限管理与Shiro
将 Shiro 作为应用的权限基础 一:shiro的整体架构
还在亲手写Filter进行权限校验?尝试一下Shiro吧|应用程序|数据源|spring|session
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服