zoukankan      html  css  js  c++  java
  • Shiro简介

    Shiro简介

    Apache  Shiro是Apache旗下的一个强大易用的Java安全|权限框架,提供了认证、授权、加密和会话管理等功能。

    相比于Spring Security,Shiro可能没有 Spring Security 的功能强大,但Shiro相对简单一些。

    其实很多时候都不需要十分复杂的安全验证,大部分时候使用短小精悍的Shiro就足够了。

    Shiro的功能模块

    • Authentication:身份认证/登录,验证用户是不是拥有相应的身份
    • Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限,比如验证某个用户是否是vip、svip,是否拥有下载文件的权限等等
    • Session Manager:会话(session)管理
    • Cryptography:加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储

    这些是主要关心的,常使用的。

    • Web Support:Web 支持,使shiro可以集成到 Web 环境
    • Caching:缓存,比如用户登录后,缓存用户信息、拥有的角色/权限,不必每次去数据库查,提高效率
    • Concurrency:shiro支持多线程应用的并发验证,比如在一个线程中开启另一个线程,能自动把权限传播过去
    • Testing:提供测试支持
    • Run As:允许一个用户以另一个用户(如果他们允许)的身份进行访问
    • Remember Me:一次登录后,以后会自动登录,不用再输入账号、密码

    这些是shiro提供的特性,根据需要选择使用。

    shiro 不会自动去维护用户、维护权限,需要我们自己去设计、提供,然后通过相应的接口注入给 shiro 。

    shiro的实现原理

    在这里插入图片描述

    程序代码通过 Subject 来进行认证和授权。 SecurityManager来处理、管理所有Subject的认证、授权; 我们需要给Shiro 的 SecurityManager 注入 Realm,告诉SecurityManager正确的用户信息、授权规则。

    shiro的架构

    在这里插入图片描述

    • Subject:主体,主体可以是任何可以与应用交互的“用户”
    • SecurityManager :是 Shiro 的核心组件,所有的交互都通过 SecurityManager 进行管理、控制,管理着所有的Subject、负责进行认证和授权,也可以管理会话、缓存
    • Authenticator:认证器,负责主体认证。可扩展,如果觉得默认实现不好,可以自定义实现;其需要认证策略(Authentication Strategy),即什么情况下算用户认证通过了
    • Authrizer:授权器,也叫做访问控制器,用来决定Subject是否有权限进行相应的操作,即控制用户能使用应用中的哪些功能
    • Realm:领域,即安全实体数据源,用于获取安全主体。可以有 1 个或多个 Realm。可以是 JDBC 实现,也可以是 LDAP 实现,或者内存实现等等。Shiro不知道正确的用户信息、权限存储的实现方式、储存位置、内容,所以一般都需要自己来实现Realm
    • SessionManager:管理session(会话)
    • SessionDAO:对session中的数据(主要是用户信息、权限)进行持久层操作
    • CacheManager:缓存控制器,用于缓存用户信息、角色、权限等数据。这些数据很少改变,可以放到缓存中,后续使用时从缓存中获取,不必每次都查询数据库,提高效率
    • Cryptography:密码模块,用于数据加密

    Shiro的依赖

    在shiro官网可以查看shiro的依赖:

    根据需要选择对应的依赖即可。可以点Artifact中的链接下载对应的jar包,也可以使用maven坐标。

    shiro常用的依赖

        <!--shiro的核心模块,是shiro必需的。后面的模块中都已包含了此模块-->
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-core</artifactId>
            <version>1.5.1</version>
        </dependency>
    

    <!--在web项目中使用shiro--> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-web</artifactId> <version>1.5.1</version> </dependency>

    <!--在servlet中使用shiro,以filter的形式使用--> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-servlet-plugin</artifactId> <version>1.5.1</version> </dependency>

    <!--在aspectj项目中使用shiro,以aop的形式使用,此模块提供了shiro相关的注解--> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-aspectj</artifactId> <version>1.5.1</version> </dependency>

    <!--在ehcache中使用shiro--> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-ehcache</artifactId> <version>1.5.1</version> </dependency>

    <!--在spring中使用shiro--> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.5.1</version> </dependency>

    <!--在springboot中使用shiro--> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring-boot-starter</artifactId> <version>1.5.1</version> </dependency>

    <!--在基于springboot的web项目中使用shiro--> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring-boot-web-starter</artifactId> <version>1.5.1</version> </dependency>

    原文出处

    https://blog.csdn.net/pengjwhx/article/details/84867112

    在原文的基础上进行了部分增删改

  • 相关阅读:
    linux shell获取用户输入
    yii2 笔记(1)
    yii2 数据库查询
    Yii2 环境配置生产环境和测试环境
    mysql 中find_in_set()和in()用法比较
    使用js提交form表单的两种方法
    base64编码的原理及实现
    浅析HTTP/2的多路复用
    Nginx 所使用的 epoll 模型是什么?
    git代码统计
  • 原文地址:https://www.cnblogs.com/chy18883701161/p/12596091.html
Copyright © 2011-2022 走看看