zoukankan      html  css  js  c++  java
  • 第一章:shiro简介

    1.1 简介

       Apache Shiro是java的一个安全框架,相当简单,没有Spring Security功能强大,但是实际工作中大多使用shiro就够了。可以帮助我们完成:认证,授权,加密,会话管理,web集成,缓存等,基本功能如下所示。

    Authentication:身份认证/登录,验证用户是不是拥有对应的身份

    Authorization:权限验证,验证是否拥有某个权限,可以验证的那个用户是否拥有某个角色,用户是否对某个资源具有权限

    Session management:会话管理,用户登录就是一次会话,没有关闭浏览器之前,信息都会存到session中

    Cryptography:加密,保护数据安全性,如密码加密存到数据库

    Web Support:Web支持,可以集成到web环境

    Caching:缓存,比如用户登陆后,用户信息和拥有的权限不必每次去查,这样可以提高效率

    Concurrency:支持多线程的并发验证,在一个线程中重新开启一个线程,能把权限自动传播过去

    Testing:提供测试支持

    Run As:允许一个用户假装成另一个用户的身份进行登录

    Remember me: 记住我,一次登录之后,下次就不用登陆了

         切记:shiro不会去维护用户,维护权限,需要我们自己去设计,通过接口注入到shiro

    1.2从应用程序角度来看Shiro如何完成工作

         

        可以看到,应用代码直接交互的对象是Subject,也就是说Shiro对外Api核心就是Subject,每个API的含义:

    Subject:主体,代表当前“用户”,不一定是个具体的人,只要与当前应用交互的任何东西都是Subject,如爬虫,机器人,所有的Subject都绑定到SecurityManager,与Subject的所有交互都会委托SecurityManager,可以理解为,Subject是门面,SecurityManager是执行者。

    SecurityManager:安全管理器,所有与安全有关的操作都会与SecurityManager交互,他管理者所有的Subject,是Shiro的核心,他负责与后边介绍的其他组件进行交互。

    Realm:域,Shrio从Realm获取安全数据(用户,角色,权限),就是说SecurityManager要验证用户身份,从Realm获取相应用户,权限/角色进行比较来确定的,就是安全数据来源。

    举例:一个最简单的shiro应用:

        1.应用代码通过subject来进行认证和授权,而subject又委托给SecurityManager

        2.我们将用户权限信息,注册到realm中,SecurityManager根据realm中的安全信息进行验证

    1.3从Shiro内部来看下Shiro的架构

        解释每个组建的意义:

    Subject:主体,任何与应用进行交互的都是Subject

    SecurityManager:具体交互交给SecurityManager进行,管理所有Subject,负责进行认证和授权,会话,缓存的管理。

    Authenticator:认证器,可以进行扩展,如果觉得shiro默认的不好,可以传入认证策略去自定义实现

    Realm:安全数据来源,可以是一个或者是多个,shiro不管你的用户或者权限是什么,怎么存储的,所以我们一般都要在程序中实现自己的Realm

    SessionManager:管理session,抽象了一个自己的session来管理主体和应用之间的交互数据,可以实现自己的分布式会话

    SessionDAO:数据访问对象,用于会话的CRUD(增删改查),可以通过实现SessionDAO把session放到想要放的位置,如数据库或者是Memcached,SessionDAO中可以使用Cache进行缓存,以提高性能

    CacheManager:缓存控制器,来管理用户,角色,权限等的缓存,以提高性能

    Cryptography:加解密模块,加入了一些常见的加密组件用户密码解密/解密

  • 相关阅读:
    SSM-网站后台管理系统制作(4)---Ajax前后端交互
    SSM-网站后台管理系统制作(3)---Google的reCaptcha验证码
    SSM-网站后台管理系统制作(2)---SSM基本工作原理
    SSM-网站后台管理系统制作(1)
    编译原理(龙书)-编译器制作
    Linux相关代码
    Python制作AI贪吃蛇
    S-DES算法实现(C++版本)
    照片收藏
    Python-制作抖音图片
  • 原文地址:https://www.cnblogs.com/jijiji/p/6638095.html
Copyright © 2011-2022 走看看